gpt4 book ai didi

python - 类魔法/dunder 方法(mul、rmul)?

转载 作者:行者123 更新时间:2023-12-05 09:02:45 25 4
gpt4 key购买 nike

我想将 __mul____rmul__ 类方法添加到类中,以便能够执行以下语法:

object - 3 * ObjectType

但是当我尝试执行以下操作时:

>>> class ClassMult:
... @classmethod
... def __mul__(cls, other):
... print(cls.__qualname__)
...
... @classmethod
... def __rmul__(cls, other):
... print(cls.__qualname__)
...
>>> 2 * ClassMult

我收到以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'int' and 'type'

我能达到预期的效果吗?如果可以,我该怎么做?

最佳答案

@classmethod 对此不起作用。如果你想为一个对象实现 *,你必须在它的类上这样做。当对象本身是一个类时,您需要自定义类的类,也就是它的元类:

class ClassMultMeta(type):
def __mul__(self, other):
...
def __rmul__(self, other):
...

class ClassMult(metaclass=ClassMultMeta):
pass

请注意,元类是一种高度特化的工具,有很多微妙的警告,特别是在它们如何与其他元类和其他语言功能(如 __init_subclass__)交互方面。如果您不是绝对需要使用元类,通常最好不要使用元类。

关于python - 类魔法/dunder 方法(mul、rmul)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70963308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com