Python: Различный след конструктора в производном классе - PullRequest
3 голосов
/ 24 февраля 2011

Как получить другой конструктор в производном классе в 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

Iget

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 ]

8 голосов
/ 26 октября 2012

Убедитесь, что вы наследуете от класса, а не от модуля.

Я получил то же сообщение об ошибке при использовании моделей django

Ошибка была в том, что я унаследовал мою модель от модели. Модель

У меня было что-то вроде

class Entry(models):
    content = models.TextField()
    pub_date = models.DateTimeField()

когда это должно было быть

class Entry(models.Model):
    content = models.TextField()
    pub_date = models.DateTimeField()

Обратите внимание на отсутствующие модели. Модель

3 голосов
/ 24 февраля 2011
class DerivedClass(AbstractClass):

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

c = DerivedClass(1,2,3,4)
3 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...