一个简单的例子
class A:
'''
TODO
'''
pass
a = A()
print a.xxx
a.xxx1(1, 2, key='ssss')
a.xxx2(1, 2)
a.xxx3(1, 2, a.xxx)
a.xxx4(1, 2, a.xxx1(1, 2, key='ssss'))
运行上述代码,程序会报错。原因是因为在A类的对象a中,不存在诸多行为和属性。如果要使得运行不报错,也就是说,随便给定a行为和属性,它都能统统接受,该怎么做呢?
这就利用到了函数的魔法方法。
魔法方法(Magic Methods)
class A:
def __getattr__(self, attr):
def _(*args, **kw):
print args, kw
return _
pass
a = A()
print a.xxx
a.xxx1(1, 2, key='ssss')
a.xxx2(1, 2)
a.xxx3(1, 2, a.xxx)
a.xxx4(1, 2, a.xxx1(1, 2, key='ssss'))
运行结果:
<function _ at 0x0000000002247128>
(1, 2) {'key': 'ssss'}
(1, 2) {}
(1, 2, <function _ at 0x0000000002247208>) {}
(1, 2) {'key': 'ssss'}
(1, 2, None) {}