gpt4 book ai didi

python-2.7 - 在 python 中使用 super 和 class 方法

转载 作者:行者123 更新时间:2023-12-03 11:17:11 25 4
gpt4 key购买 nike

我试图了解如何进行这项工作。我想使用类方法实例化父类。这段代码给了我一个错误:

class Base(object):
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z

@classmethod
def class_method(cls, a, b, c):
return cls(a, b, c)

class Child(Base):
def __init__(self, x, y, z, p):
super(Child, self).class_method(x, y, z)
self.p = p

c = Child(1, 2, 3, 10)

我收到以下错误:
TypeError: __init__() takes at least 5 arguments (4 given)

我也知道原因。因为 cls变量保存 Child类(class)。所以当 cls(a, b, c)被调用,python 尝试初始化 Child带有 4 个参数的类, self , a , b , c .但是 Child类需要 5 个参数。
我如何实现这个功能?我明白除非绝对必要,否则我们不应该使用工厂方法。假设这是必要的。

最佳答案

你实际上不应该使用 @classmethod在这个特殊情况下@staticmethod是更好的解决方案

如您所见,类(class) Child传入 Base.do方法。
但如果你想一直和类(class)一起工作 Base ,只需像这样制作静态方法

class Base:
@staticmethod
def do(a, b, c):
return Base(a, b, c)

使用 @staticmethod更好,因为在类 Basedo您希望始终使用同一个类而不是其他类的方法

这可能是一个小问题,比如说,重命名类,但可以使用 IDLE(或几乎任何其他文本编辑器)的替换功能(Edit > Replce (Ctrl + H))来处理它

关于python-2.7 - 在 python 中使用 super 和 class 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24238367/

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