【发布时间】:2014-06-16 07:15:46
【问题描述】:
我正在尝试了解如何进行这项工作。我想使用类方法实例化父类。这段代码给了我一个错误:
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 类。所以当cls(a, b, c)被调用时,python会尝试用4个参数来初始化Child类,self,a,b,c。但是Child 类需要 5 个参数。
如何实现此功能?我知道除非绝对必要,否则我们不应该使用工厂方法。假设它是必要的。
【问题讨论】:
-
就是重点,我要调用类方法。在这种情况下,它什么也不做,但它可以对输入进行一些转换并将其传递给 init 方法
-
我不认为你的类方法做你认为它做的事情。它不是修改当前对象,而是简单地返回一个新实例化的对象。你可以使用“Base.class_method(x, y, z)”来调用类方法,但是除非你真正使用它的结果,否则它是没有用的。
-
我明白了,我的方法是错误的。但是如何使用类方法实例化一个超类呢?这是我的主要问题
标签: python-2.7 inheritance super