一个类中不能有两个构造函数.
构造函数必须命名为__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,除了default之外,它还可以使用now,fromtimestamp或其他一些替代构造函数构造.
使用default-valued,keyword-only和/或variable-argument参数来创建可以以不同方式调用的单个构造函数:
class Breakfast(object):
def __init__(self, eggs=0, spam=5):
self.spam, self.eggs = spam, eggs
int就是一个例子:您可以从字符串和基础创建它,或者从知道如何将自身转换为整数的单个参数创建它.
创建每个都有不同构造函数的子类:
class Breakfast(object):