Python学习笔记——继承和super().__init__()

关于继承和super的使用本文做以下解释,方便新手理解编程用法。

引言

在面向对象编程中,你编写表示现实世界中的事情和情景的的类,并基于这些类来创建对象。编写类时,你定义一大类对象都有通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。
Python编写类时,并非总要从空白开始。如果你编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类,它将自动获得另一个类的所有属性和方法;此外,子类在继承父类的属性和方法的同时,还可以定义自己的属性和方法。

super的使用

super是一个特殊函数,能够将父类和子类关联起来。

  1. 子类继承父类,但不重写构造函数__init__(初始化),那么子类会自动继承父类属性和方法
class Person:
        def __init__(self):
                self.name = 'name'
                self.age = 'age'
        def Hello(self):
                print("成功继承父类方法")
		
class Gao(Person):
        pass

p = Person()
g = Gao()
print('父类属性:',p.name)
print('父类属性:',p.age)
print('继承父类属性:',g.name)
print('继承父类属性:',g.age)
g.Hello()

输出结果:
父类属性: name
父类属性: age
继承父类属性: name
继承父类属性: age
成功继承父类方法
  1. 子类继承父类,重写构造函数__init__(初始化),但不使用super初始化父类构造函数,那么子类不会自动继承父类的属性,会继承方法
class Person:
        def __init__(self):
                self.name = 'name'
                self.age = 'age'
        def Hello(self):
                print("成功继承父类方法")
		
class Gao(Person):
        def __init__(self):
                self.height = 'height'

p = Person()
g = Gao()
g.Hello()
print('父类属性:',p.name)
print('父类属性:',p.age)
print('子类属性:',g.height)
print('继承父类属性:',g.age)

输出结果:
成功继承父类方法
父类属性: name
父类属性: age
子类属性: height
Traceback (most recent call last):
  File "person.py", line 187, in <module>
    print('继承父类属性:',g.age)
AttributeError: 'Gao' object has no attribute 'age'
  1. 子类继承父类,重写构造函数__init__(初始化),且使用super初始化父类构造函数,那么子类会自动继承父类的属性和方法
class Person:
        def __init__(self):
                self.name = 'name'
                self.age = 'age'
        def Hello(self):
                print("成功继承父类方法")
		
class Gao(Person):
        def __init__(self):
                super().__init__()
                self.height = 'height'

p = Person()
g = Gao()
g.Hello()
print('父类属性:',p.name)
print('父类属性:',p.age)
print('子类属性:',g.height)
print('继承父类属性:',g.age)

输出结果:
成功继承父类方法
父类属性: name
父类属性: age
子类属性: height
继承父类属性: age

参考《Python编程从入门到实践》

猜你喜欢

转载自blog.csdn.net/qq_36786467/article/details/108417560