标签:attr recent == def 除了 情况 color obj attribute
__str__
__repr__
__iter__
__next__
__getitem__
__getattr__
正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错。比如定义Student
类:
class Student(object): def __init__(self): self.name = ‘Michael‘
调用name
属性,没问题,但是,调用不存在的score
属性,就有问题了:
>>> s = Student() >>> print(s.name) Michael >>> print(s.score) Traceback (most recent call last): ... AttributeError: ‘Student‘ object has no attribute ‘score‘
错误信息很清楚地告诉我们,没有找到score
这个attribute。
要避免这个错误,除了可以加上一个score
属性外,Python还有另一个机制,那就是写一个__getattr__()
方法,动态返回一个属性。修改如下:
class Student(object): def __init__(self): self.name = ‘Michael‘ def __getattr__(self, attr): if attr==‘score‘: return 99
当调用不存在的属性时,比如score
,Python解释器会试图调用__getattr__(self, ‘score‘)
来尝试获得属性,这样,我们就有机会返回score
的值:
>>> s = Student() >>> s.name ‘Michael‘ >>> s.score 99
返回函数也是完全可以的:
class Student(object): def __getattr__(self, attr): if attr==‘age‘: return lambda: 25
只是调用方式要变为:
>>> s.age()
25
注意,只有在没有找到属性的情况下,才调用__getattr__
,已有的属性,比如name
,不会在__getattr__
中查找。
标签:attr recent == def 除了 情况 color obj attribute
原文地址:http://www.cnblogs.com/mirrorlake/p/7890954.html