hasattr,getattr和setattr

匿名 (未验证) 提交于 2019-12-02 23:55:01
# 我们用 hasattr() 函数判断指定属性(或方法)是否存在, # 但到底是属性还是方法,则需要进一步判断它是否可调用。 # 程序可通过判断该属性(或方法)是否包含 __call__ 属性来确定它是否可调用  class User:     def __init__(self, name, passwd):         self.name = name         self.passwd = passwd     def validLogin (self):         print('验证%s的登录' % self.name)        u = User('crazyit', 'leegang') # 判断u.name是否包含__call__方法,即判断是否可调用 print(hasattr(u.name, '__call__')) # False  # 判断u.passwd是否包含__call__方法,即判断是否可调用 print(hasattr(u.passwd, '__call__')) # False  # 判断u.validLogin是否包含__call__方法,即判断是否可调用 print(hasattr(u.validLogin, '__call__')) # True  '''对于 name、 passwd 两个属性,由于它们都是不可调用的, 因此程序在判断它们是否包含 __call__ 方法时输出 False; 对于 validLogin 方法,由于它是可调用的, 因此程序在判断它是否包含 __call__  方法时输出 True。 实际上,一个函数(甚至对象)之所以能执行,关键就在于 __call__() 方法。 实际上 x(arg1, arg2,...) 只是 x.__call__(arg1, arg2, ...) 的快捷写法, 因此我们甚至可以为自定义类添加 __call__ 方法,从而使得该类的实例也变成可调用的。'''  # 定义Role类 class Role:     def __init__ (self, name):         self.name = name     # 定义__call__方法     def __call__(self):         return self.name r = Role('管理员') # 直接调用Role对象,就是调用该对象的__call__方法 print(r())   def foo ():     print('--foo函数--') # 下面示范了2种方式调用foo()函数 foo() foo.__call__() #两种方法都可以效果一样

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!