更改python对象函数

2024-05-16 01:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在某处看到有一种方法可以改变python中的一些对象函数

def decorable(cls):
    cls.__lshift__ = lambda objet, fonction: fonction(objet)
    return cls

我想知道你是否可以用ruby做这样的事情:

number.times

例如,我们是否可以通过将上面的函数应用于int类来更改一些预定义的类?如果是这样的话,有什么办法可以做到吗?你能给我链接一下python的文档吗?它显示了所有可以修改的函数(比如lshift)?你知道吗


Tags: 对象方法lambda函数numberreturndef事情
1条回答
网友
1楼 · 发布于 2024-05-16 01:37:23

通常不会- 通常,在CPython的本机代码中定义的Python类型不能通过monkey补丁获得新方法。尽管可以通过直接访问内存和改变C对象结构来实现这一点,但是使用CPython——这并不被认为是“聪明”、“漂亮”,更不可用。(勾选https://github.com/clarete/forbiddenfruit

也就是说,对于您在自己的包中定义的类层次结构,这非常有效—设置的任何神奇的“dunder”方法都会在整个过程中更改该类的所有对象的行为。你知道吗

所以,不能对Python的“int”这样做,但是可以有一个

class MyInt(int):
    pass

a = MyInt(10)

MyInt.__rshift__ = lambda self, other: MyInt(str(self) + str(other))

print(a >> 20)

将导致1020被打印。你知道吗

Python文档thta讲述了该语言使用的所有神奇方法,即数据模型:

https://docs.python.org/3/reference/datamodel.html

相关问题 更多 >