欢迎访问宙启技术站
智能推送

Python中的构造函数__init__()和继承中子类调用父类的用法分析

发布时间:2023-12-27 15:23:08

在Python中,如果一个类需要在创建对象时进行一些初始化的操作,我们可以通过定义一个特殊的方法__init__()来实现。__init__()方法是一个类的构造函数,在创建对象时自动调用。

__init__()方法的语法如下:

def __init__(self, param1, param2, ...):
    # 初始化操作

其中,self代表类的实例对象,param1, param2, ...是构造函数的参数。通过在__init__()方法中对参数进行初始化操作,我们可以在创建对象时直接为对象的属性赋值。

下面是一个使用__init__()方法的例子:

class Person():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print("My name is", self.name, "and I am", self.age, "years old.")

p = Person("Alice", 25)
p.introduce()

输出结果:

My name is Alice and I am 25 years old.

在上面的例子中,Person类的构造函数__init__()接受两个参数nameage,并将它们分别赋值给self.nameself.age。在创建对象p时,我们传递了参数"Alice"25,这样就通过构造函数为p对象的name属性和age属性赋值了。最后调用对象的introduce()方法可以打印出对象的属性值。

继承是面向对象编程的重要概念之一,它允许子类继承父类的属性和方法,并且可以在子类中新增属性和方法。

在子类中调用父类的构造函数有两种方式:显式调用和隐式调用。

显式调用父类的构造函数,可以使用super()函数实现。一个子类的__init__()方法中,可以通过super().__init__()来显式调用父类的构造函数,并传递子类的实例对象即self作为参数。

以下是一个示例:

class Person():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print("My name is", self.name, "and I am", self.age, "years old.")

class Student(Person):
    def __init__(self, name, age, score):
        super().__init__(name, age)
        self.score = score

    def show_score(self):
        print("My score is", self.score)

s = Student("Bob", 20, 90)
s.introduce()
s.show_score()

输出结果:

My name is Bob and I am 20 years old.
My score is 90

在上面的例子中,Person类是父类,Student类继承自Person类。在Student类的__init__()方法中,我们调用super().__init__(name, age)来显式调用父类Person的构造函数,并传递子类的实例对象self以及其他参数。这样就可以在子类中实现对父类属性的初始化。

另外,还可以使用父类名.__init__(self, param1, param2, ...)的形式显式调用父类的构造函数。

隐式调用父类的构造函数是一种默认的方式。当子类没有定义自己的__init__()方法时,将默认调用父类的构造函数。下面是一个示例:

class Person():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print("My name is", self.name, "and I am", self.age, "years old.")

class Student(Person):
    def show_score(self):
        print("My score is", self.score)

s = Student("Bob", 20)
s.introduce()

输出结果:

My name is Bob and I am 20 years old.

在上面的例子中,Student类没有定义自己的__init__()方法,所以默认调用了父类Person的构造函数,完成了对子类对象的初始化。

综上所述,Python中的构造函数__init__()可以用来在创建对象时进行初始化操作,在类的内部通过self参数为对象的属性赋值。

在继承中,子类可以通过显式调用super().__init__()父类名.__init__(self, param1, param2, ...)的方式调用父类的构造函数,并通过传递子类的实例对象self和其他参数来实现对父类属性的初始化。