9.3 构造函数

上一节中的写法只在说明概念的时候使用,因为给一个实例添加了变量,再给另一个实例添加变量,这会有太多的重复操作,并且实例的方法中要使用变量,要求变量必须已经存在。所以一般采用构造函数来给一个类添加并初始化变量。

由于变量会覆盖掉具有相同名称的方法,为了避免这种冲突,

9.3.1 __init__()方法

__init__()方法用来完成一些实例化一个实例时,默认要进行的操作。例如:

class Student:

    # 不带参数的构造函数
    def __init__(self):
        self.name = 'zhangsan'
        self.sex = 'male'
        self.age = 20

构造函数同样必须要有self参数,在构造函数中指定一个实例变量的最初的值。在创建实例之后,__init__()方法立刻被调用,于是实例的变量就有了初始化的值:

# 不带参数的构造函数,创建实例
s = Student()
print(s.name)
print(s.sex)
print(s.age)

结果为:

zhangsan
male
20

这时创建的实例都被初始化成了一样的名字,可以进一步修改构造函数,接收参数,进行实例变量的设置:

class Student:

    # 带参数的构造函数
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age

这时创建实例时,就要传入相应的参数进行初始化:

# 带参数的构造函数,创建实例
s1 = Student('lisi', 'male', 24)
print(s1.name)
print(s1.sex)
print(s1.age)

结果为:

lisi
male
24

如果对参数有更多的要求,可以使用前面函数的各种参数,例如默认参数,关键字参数等,以完成不同要求的初始化。

本节例子:9.2-init.py

# init构造函数


class Student:
    # 不带参数的构造函数
    # def __init__(self):
    #     self.name = 'zhangsan'
    #     self.sex = 'male'
    #     self.age = 20

    # 带参数的构造函数
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age

    # 定义方法
    def bao_ming(self):
        print('学生{}报名。'.format(self.name))


# 不带参数的构造函数,创建实例
# s = Student()
# print(s.name)
# print(s.sex)
# print(s.age)

# 带参数的构造函数,创建实例
s1 = Student('lisi', 'male', 24)
print(s1.name)
print(s1.sex)
print(s1.age)

# 调用方法
# s.bao_ming()