专业编程基础技术教程

网站首页 > 基础教程 正文

python基础入门,python类反射的作用,以及包含的4个方法

ccvgpt 2024-08-05 12:13:37 基础教程 13 ℃

python类的反射

hasattr:判断一个方法是否存在与这个类中

getattr:根据字符串去获取obj对象里的对应的方法的内存地址,加"()"括号即可执行

python基础入门,python类反射的作用,以及包含的4个方法

示例:获取用户输入的内容,调用相应的方法

class dog(object):
 def __init__(self,name):#构造函数
 self.name=name
 def eat(self,food):#新建一个吃的方法
 print("%s is eating"%self.name,food)
d=dog("Pig")#实例化dog
choise=input(">>:").strip()#定义一个让用户输入字符串
if hasattr(d,choise):#判断用户输入的eat方法是否存在
 func=getattr(d,choise)#存在则通过给getattr赋值进行调用执行
 func("Yumi")
运行结果:
>>:eat
Pig is eating Yumi

setattr:通过setattr将外部的一个函数绑定到实例中

示例:为dog新添加一个方法,首先需要在外部自己先定义一个新的方法

def bulk(self):
 print("%s is WangWang......"%self.name)
class dog(object):
 def __init__(self,name):
 self.name=name
 def eat(self,food):
 print("%s is eating"%self.name,food)
d=dog("Pig")
choise=input(">>:").strip()
如何执行?
if hasattr(d,choise):
 func=getattr(d,choise)
 func("Yumi")
else:
 setattr(d,choise,bulk)
 d.talk(d)
通过setattr方法把bulk函数绑定到dog这个实例里,方法名是"talk"

delattr:删除一个实例或者类中的方法

if hasattr(d,choise):
 delattr(d,choise)#删除类里的方法
 # func=getattr(d,choise)
 # func("Yumi")
else:
 # setattr(d,choise,bulk)
 # d.talk(d)
 setattr(d,choise,22)
 print(getattr(d,choise))
print(d.name)
运行结果:
AttributeError: 'dog' object has no attribute 'name'
说明已经将其删除。

总结

以上就是今天的python类的反射,包含四个方法,分别是:hasattr、getattr、setattr、delattr。分别是:判断一个属性是否在类中,获取方法并调用、增加外部新的方法到实例中、删除实例中的方法。

感谢阅读,欢迎在评论区中发表自己不同的观点,若有其他问题请在评论区留言,喜欢的朋友请多多关注转发支持一下。

Tags:

最近发表
标签列表