一个类中不能有两个构造函数。
构造函数必须命名
__init__。而且,与Java不同,Python不允许按参数类型重载函数或方法。因此,如果您有两个构造函数,则它们都将是同一函数。
有几种解决方法。
使用
@classmethods作为备用构造函数:
class Breakfast(object): @classmethod def from_eggs(cls, eggs): obj = cls() obj.spam, obj.eggs = 5, eggs return obj @classmethod def from_spam_and_eggs(cls, spam, eggs): obj = cls() obj.spam, obj.eggs = spam, eggs return obj
从标准库一个简单的例子是
datetime.datetime,可以用被构造
now,
fromtimestamp或一些其他的替代构造,除了默认。
使用默认值,仅关键字和/或变量参数的参数来制作一个可以以不同方式调用的构造函数:
class Breakfast(object): def __init__(self, eggs=0, spam=5): self.spam, self.eggs = spam, eggs
int
例如:您可以从字符串和基数,或者从知道如何将自身转换为整数的单个参数创建它。
创建每个具有不同构造函数的子类:
class Breakfast(object): passclass HealthyBreakfast(object): def __init__(self, spam): self.spam, self.eggs = spam, 0class NormalBreakfast(object): def __init__(self, spam, eggs): self.spam, self.eggs = spam, eggs
在上述任何一种情况下,都可以将通用性排除在单个“基本”初始值设定项中。例如:
class Breakfast(object): def __init__(self, eggs, spam): self.spam, self.eggs = spam, eggsclass HealthyBreakfast(object): def __init__(self, spam): super(HealthyBreakfast, self).__init__(0, spam)
当然,在任何情况下都不可能在没有垃圾邮件的情况下享用早餐。



