Python中类定义多个构造函数可以通过方法重载实现。在Python中,每个类都至少有一个构造方法__init__
,默认的构造方法有且只有一个参数self
,用来指代类的实例对象。为了定义多个构造方法,可以在类中增加其他名称的方法,用来接受参数并返回类的实例对象。下面是具体的构造函数定义步骤:
- 定义类,并在类中定义默认的构造函数
__init__
,该构造函数只需要一个参数self
;
class Person:
def __init__(self, name):
self.name = name
self.age = 0
- 定义其他构造函数,可以通过不同的参数列表定义不同的构造函数,注意不同构造函数的参数不能完全一样;
class Person:
def __init__(self, name):
self.name = name
self.age = 0
def from_birth_year(name, birth_year):
self.name = name
self.age = datetime.datetime.now().year - birth_year
def from_input(name):
self.name = name
self.age = int(input("Enter age:"))
在上面的例子中,我们定义了两个不同的构造函数from_birth_year
和from_input
,分别用来接受不同的参数列表。
- 定义其他构造函数时,需要显式地调用
__init__
方法,以便将一些属性或变量初始化到对象中;
class Person:
def __init__(self, name):
self.name = name
self.age = 0
def from_birth_year(name, birth_year):
self.name = name
self.age = datetime.datetime.now().year - birth_year
super().__init__(name)
def from_input(name):
self.name = name
self.age = int(input("Enter age:"))
super().__init__(name)
在上面的例子中,我们通过super().__init__(name)
来显式调用默认构造函数__init__
,从而完成对象的初始化。
下面是两个实例代码,来说明如何使用多个构造函数:
# 例子1:使用from_birth_year构造函数
person1 = Person.from_birth_year("Tom", 1995)
print(person1.name, person1.age) #Tom 26
# 例子2:使用from_input构造函数
person2 = Person.from_input("Jerry")
print(person2.name, person2.age)
#Enter age:30
#Jerry 30
在上面的例子中,我们实例化了两个Person
对象,分别使用了两种不同的构造函数,从而得到了不同的对象。