对象类覆盖或修改

时间:2009-04-26 09:36:42

标签: python

是否可以向对象类添加方法,并在所有对象上使用它?

3 个答案:

答案 0 :(得分:8)

在Python中,属性是使用字典实现的:

>>> t = test()
>>> t.__dict__["foo"] = "bla"
>>> t.foo
'bla'

但是对于“对象”,它使用'dictproxy'作为接口来阻止这种分配:

>>> object.__dict__["test"] = "test"
TypeError: 'dictproxy' object does not support item assignment

所以不,你不能。

注意:你也不能直接修改元类型。但由于Python非常灵活,我相信Guru可以找到实现你想要的方法。这附近有黑巫师:-)?

答案 1 :(得分:5)

不,Python的内部人员非常注意使内置类型不可变 - 与Ruby的设计选择截然不同。如果没有深深地弄乱C编码的内部结构并重新编译Python运行时来制作一个非常不同的版本(这是经典的CPython,但我相信完全相同的原则适用于其他良好的实现,例如,不可能使对象“monkeypatchable”作为Jython和IronPython,分别只是s / C / Java /和S / C / C#/; - )。

答案 2 :(得分: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)