>>> d = Example(a=1, b=2, c=3)
>>> d.a()
1
>>> d.b()
2
>>> d.foo()
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
d.foo()
File "/home/ashwini/py/so.py", line 7, in __getattr__
raise TypeError('Example object has not attribute {!r}'.format(k))
TypeError: Example object has not attribute 'foo'
class example(object) :
dict={'k1':'v1','k2':'v2','k3':'v3','kn':'vn'}
def getvalue(self,key) :
return self.dict[key]
if __name__=="__main__" :
e = example()
e.method1=e.getvalue # this is adding a method to example class dynamically.
print e.method1('k1')
e.method2=e.getvalue
print e.method2('k2')
e.method3=e.getvalue
print e.method3('k3')
e.methodn=e.getvalue
print e.methodn('kn')
您想要的是重写
__getattr__
函数described here。你知道吗以你为例:
这允许您执行以下操作:
与其动态创建这么多方法,不如重写类的
__getattr__
方法并从中返回一个可调用的:请注意,对于
keys()
、items()
等键,__getattr__
不会被调用,因为它们是由__getattribute__
本身在类中找到的。最好不要用它们来命名你的钥匙。你知道吗演示:
我认为向类中动态添加一个方法可以帮助您
这个输出 第1版 第2版 第3版 越南
相关问题 更多 >
编程相关推荐