Лучший ответ - приведенный выше об аргументах по умолчанию, но мне было весело писать это, и это, безусловно, отвечает требованиям "множественных конструкторов". Используйте на свой страх и риск.
А как насчет нового метода.
"Типичные реализации создают новый экземпляр класса, вызывая метод new () суперкласса, используя super (currentclass, cls). new (cls [, ...] ) с соответствующими аргументами, а затем при необходимости изменив созданный экземпляр перед его возвратом. "
Таким образом, вы можете * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.
class Cheese(object):
def __new__(cls, *args, **kwargs):
obj = super(Cheese, cls).__new__(cls)
num_holes = kwargs.get('num_holes', random_holes())
if num_holes == 0:
cls.__init__ = cls.foomethod
else:
cls.__init__ = cls.barmethod
return obj
def foomethod(self, *args, **kwargs):
print "foomethod called as __init__ for Cheese"
def barmethod(self, *args, **kwargs):
print "barmethod called as __init__ for Cheese"
if __name__ == "__main__":
parm = Cheese(num_holes=5)