对象类重写或修改
有没有办法给一个对象的类添加一个方法,然后让所有这个类的对象都能使用这个方法呢?
3 个回答
0
>>> object.test = "Test" Traceback (most recent call last): File "", line 1, in TypeError: can't set attributes of built-in/extension type 'object'
看起来不是这样。(Python 2.5.1)
5
不,Python的内部设计非常注重让内置类型是不可变的,这和Ruby的设计选择完全不同。想要让一个对象可以被“猴子补丁”(也就是动态修改)是很难的,这需要深入修改用C语言写的内部代码,并且还要重新编译Python的运行环境,才能做出一个完全不同的版本(这指的是经典的CPython,但我相信其他一些好的实现,比如Jython和IronPython,原则上也是一样的,只是把C换成Java和C#而已;-)。
8
在Python中,属性是通过字典来实现的:
>>> t = test()
>>> t.__dict__["foo"] = "bla"
>>> t.foo
'bla'
但是对于“对象”,它使用了一个叫做'dictproxy'的东西作为接口,以防止这样的赋值:
>>> object.__dict__["test"] = "test"
TypeError: 'dictproxy' object does not support item assignment
所以不,你是做不到的。
补充说明:你也不能直接修改元类Type。不过因为Python非常灵活,我相信有高手能找到实现你想要的办法。这里有没有什么黑魔法师呢 :-) ?