2011-02-24 52 views
3

如何在Python的派生类中有不同的构造函数?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) 

等。接口的其余部分在每个类中都是相似的,它们只需要不同的初始化参数。或者我必须通过给列表中的参数来绕过这个问题?

+1

你是如何调用DerivedClass构造函数使其发出错误的? –

+0

非常像我在最后的代码片段(我迄今只有一个派生类,所以我没有if-else构造呢)。我有自我+三个参数,我称之为“obj = DerivedClass('1','2','3')”。 – Makis

+0

你确实看到你已经定义它只接受一个实例以外的参数,对吧? –

回答

3
class DerivedClass(AbstractClass): 

    _props = '' 
    def __init__(self, *params): 
     self._props = params 
     print params # (1,2,3,4) 

c = DerivedClass(1,2,3,4) 
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

相关问题