如何在Python的派生类中使用不同的构造函数?
如果我尝试这样的话:
from abc import ABCMeta, abstractproperty, abstractmethod
class AbstractClass(object):
__metaclass__ = ABCMeta
def __init__(self):
pass
和
import AbstractClass
class DerivedClass(AbstractClass):
_prop = ''
def __init__(self, param):
self._prop = param
我得到了
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
我想做点什么
if (cl_param == '1'):
obj = DerivedClass1('1', 'c')
else if (cl_param == '2'):
obj = DerivedClass2('2', 'foo', 2)
等等。接口的其余部分在每个类中都是相似的,它们只需要不同的初始化参数。或者我是否必须通过在列表中提供参数来规避这一点?
答案 0 :(得分:8)
确保从类而不是模块继承。
使用django模型时,我收到了相同的错误消息
错误在于从models.Model继承我的模型
我有类似
的东西class Entry(models):
content = models.TextField()
pub_date = models.DateTimeField()
应该是什么时候
class Entry(models.Model):
content = models.TextField()
pub_date = models.DateTimeField()
请注意缺少的 models.Model
答案 1 :(得分:3)
答案 2 :(得分:3)
class DerivedClass(AbstractClass):
_props = ''
def __init__(self, *params):
self._props = params
print params # (1,2,3,4)
c = DerivedClass(1,2,3,4)