Python的getattr函数方法学习使用示例

08-09 76阅读 0评论

正文

__getattr__函数作用: 如果属性查找(attribute lookup)在实例以及对应的中(通过__dict__)失败, 那么会调用到类的__Getattr__函数;

如果没有定义这个函数,那么抛出AttributeError异常。由此可见,__getattr__一定是作用于属性查找的最后一步

举个栗子:

class A(object): def __init__(self, a, b): self.a1 = a self.b1 = b print('init') def mydefault(self, *args): print('default:' + str(args[0])) def __getattr__(self, name): print("other fn:", name) return self.mydefault a1 = A(10, 20) a1.fn1(33) a1.fn2('hello') 

运行结果:

initother fn: fn1default:33other fn: fn2default:hello

第16行调用fn1属性时,查找不到次属性,程序调用__getattr__方法

用__getattr__方法可以处理调用属性异常

class Student(object): def __getattr__(self, attrname): if attrname == "age": return 'age:40' else: raise AttributeError(attrname) x = Student() print(x.age)  # 40 print(x.name) 

这里定义一个Student类和实例x,并没有属性age,当执行x.age,就调用_getattr_方法动态创建一个属性,执行x.name时,__getattr__方法没有对其处理,抛出异常

age:40   File "XXXX.py", line 10, in <module> print(x.name)   File "XXXX.py", line 6, in __getattr__ raise AttributeError(attrname) AttributeError: name 

下面展示一个_getattr_经典应用的例子,可以调用dict的键值对

class ObjectDict(dict): def __init__(self, *args, **kwargs): super(ObjectDict, self).__init__(*args, **kwargs) def __getattr__(self, name): value = self[name] if isinstance(value, dict): value = ObjectDict(value) return value if __name__ == '__main__': od = ObjectDict(asf = {'a': 1}, d = True) print(od.asf, od.asf.a)  # {'a': 1} 1 print(od.d)  # True

以上就是Python的getattr方法学习使用示例的详细内容,更多关于python getattr方法的资料请关注云初冀北其它相关文章!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,76人围观)

还没有评论,来说两句吧...