Python:派生类中的不同构造函数占用空间

时间:2011-02-24 08:21:22

标签: python inheritance constructor abstract-class

如何在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)

等等。接口的其余部分在每个类中都是相似的,它们只需要不同的初始化参数。或者我是否必须通过在列表中提供参数来规避这一点?

3 个答案:

答案 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)