正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错。
Python 有一个机制,那就是 __getattr__()
方法,可以动态返回一个属性来处理那些不存在的属性和方法。
class Student(object):
def __init__(self, name):
self.name = name
def __getattr__(self, attr):
if attr == 'score':
return '暂无分数'
else:
return '该属性或方法不存在'
测试:
>>> bart = Student('bart')
>>> bart.name
'bart'
>>> bart.score
'暂无分数'
>>> bart.age
'该属性或方法不存在'
__getattr__()
方法返回函数也是完全可以的:
class Student(object):
def __init__(self, name):
self.name = name
def __getattr__(self, attr):
if attr == 'hello':
return lambda attr : '{}: Hello! {}'.format(self.name, attr)
测试:
>>> bart = Student('bart')
>>> bart.hello('sam')
'bart: Hello! sam'
注意,只有在没有找到属性的情况下,才调用 __getattr__
,已有的属性,比如 name
,不会在 __getattr__
中查找。
当 __getattr__
中没有定义时,默认返回 None
:
>>> type(bart.abc)
<class 'NoneType'>
网友评论