Python 对象类重写或修改

Python 对象类重写或修改,python,Python,是否可以将方法添加到对象类中,并在所有对象上使用它 >>> object.test = "Test" Traceback (most recent call last): File "", line 1, in TypeError: can't set attributes of built-in/extension type 'object' >>>object.test=“测试” 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:无法设置内置/扩展类型“obje

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

>>> object.test = "Test" Traceback (most recent call last): File "", line 1, in TypeError: can't set attributes of built-in/extension type 'object' >>>object.test=“测试” 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:无法设置内置/扩展类型“object”的属性
看起来不像。(Python 2.5.1)

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

>>> t = test()
>>> t.__dict__["foo"] = "bla"
>>> t.foo
'bla'
但对于“对象”,它使用“dictproxy”作为接口来防止此类分配:

>>> object.__dict__["test"] = "test"
TypeError: 'dictproxy' object does not support item assignment
所以不,你不能


注意:您也不能直接修改元类类型。但是由于Python非常灵活,我相信一位大师可以找到一种方法来实现您想要的。这里是否有黑色向导:-)?

不,Python的内部非常注意使内置类型不可变——这与Ruby的设计选择非常不同。要使对象成为“monkeypatchable”对象,就必须深入处理C代码内部,并重新编译Python运行时以生成一个完全不同的版本(这适用于经典的CPython,但我相信对于其他优秀的实现,如Jython和IronPython,也适用同样的原则,分别是s/C/Java/和s/C/C#/).

我想是的,但我不是100%确定。重复:不,元类只会影响使用它们的类和对象,而不会影响现有的内置类型,如object、int、str、float等。因此,“所有对象”都不会发生。(当然,您可以将新函数粘贴到内置函数中,这将使它们同样广泛可用,但它们不会是对象内置类型的方法)。