我在某处看到有一种方法可以在python中改变一些对象函数
def decorable(cls):
cls.__lshift__ = lambda objet, fonction: fonction(objet)
return cls
我想知道你是否可以用红宝石做事:
number.times
我们是否可以通过将上述函数应用于类int来实际更改某些预定义类?如果是这样,任何想法我怎么能做到这一点?你可以链接我的python文档显示可以改变的每个函数(如 lshift )吗?
答案 0 :(得分:0)
通常不是 - 作为一项规则,在本机代码中定义的Python类型 - 在CPython中不能修补猴子以获得新方法。虽然有办法通过直接内存访问和更改C对象结构来实现这一点,但使用CPython - 不被认为是"聪明","美丽",更不用了。 (查看https://github.com/clarete/forbiddenfruit)
也就是说,对于您在自己的包上定义的类层次结构,它几乎可以工作 - 任何魔法" dunder"在所有进程中,set方法会更改该类的所有对象的行为。
所以,你不能对Python" int" - 但你可以有一个
class MyInt(int):
pass
a = MyInt(10)
MyInt.__rshift__ = lambda self, other: MyInt(str(self) + str(other))
print(a >> 20)
将导致1020
被打印。
Python文档告诉我语言使用的所有魔术方法是数据模型: