您在这里所说的猴子补丁到底是什么意思?有几个略有不同的定义。
如果您的意思是“您可以在运行时更改类的方法吗?”,那么答案很明显是:
class Foo:
pass # dummy class
Foo.bar = lambda self: 42
x = Foo()
print x.bar()
如果您的意思是,“您可以在运行时更改类的方法,并 更改该类的 吗?” 那么答案也是。只需稍微更改顺序即可:
class Foo:
pass # dummy class
x = Foo()
Foo.bar = lambda self: 42
print x.bar()
但是您不能对某些内置类(例如int
或)执行此操作float
。这些类的方法在C中实现,并且为了使实现更容易,更有效而牺牲了某些抽象。
我不清楚您 仍要更改内置数字类的行为。如果您需要更改其行为,请对其进行子类化!!