对象类覆盖或修改

app*_*orm 4 python

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

e-s*_*tis 8

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

>>> t = test()
>>> t.__dict__["foo"] = "bla"
>>> t.foo
'bla'
Run Code Online (Sandbox Code Playgroud)

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

>>> object.__dict__["test"] = "test"
TypeError: 'dictproxy' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

所以不,你不能.

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

  • 不,元类只会影响使用它们的类和对象,而不会影响现有的内置类型,如object,int,str,float等.所以,"所有对象"都不会发生.(当然,你可以将新函数添加到__builtin中,这将使它们同样广泛可用,但它们不会成为对象内置类型的方法). (4认同)

Ale*_*lli 5

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