Python基础知识学习11:面向对象之 继承

本文介绍了Python中的继承概念,包括单继承、多继承、子类如何重写和调用父类的方法及属性,以及super()函数在调用父类方法中的应用。通过继承,子类可以扩展和复用父类的功能。
摘要由CSDN通过智能技术生成

一、继承

语法:

class 类名(object):
  代码

Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法。在Python中,所有类默认继承object类,object类是顶级类或基类;其他子类叫做派生类。

1.1 单继承

单继承:一对一,子类对父类的继承。

# 1. 师父类
class Master(object):
    def __init__(self):
        self.kongfu = '[独门拳法]'
    def make_cake(self):
        print(f'运⽤{self.kongfu}进行比武')
# 2. 徒弟类 
class Prentice(Master):
    pass
# 3. 创建对象
daqiu daqiu = Prentice()
# 4. 对象访问实例属性 
print(daqiu.kongfu)
# 5. 对象调⽤用实例方法 
daqiu.make_cake()

1.2 多继承

多继承意思就是一个类同时继承了多个父类。
 

# 父类
class Master(object):
    def __init__(self):
        self.kongfu = '[独门拳法]'
    def make_cake(self):
        print(f'运用{self.kongfu}进行比武')
# 为了验证多继承,创建学校类 
class School(object):
    def __init__(self):
        self.kongfu = '[武林第一拳法]'
    def make_cake(self):
        print(f'运用{self.kongfu}进行比武')
# 定义子类,继承两个父类
class Prentice(School, Master):
    pass
# 用徒弟类创建对象,调用实例属性和方法
daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()

# 结论:如果一个子类继承多个父类,优先继承第一个父类的属性和方法。

1.3 子类重写父类同名方法和属性

# 父类
class Master(object):
    def __init__(self):
        self.kongfu = '[独门拳法]'
    def make_cake(self):
        print(f'运用{self.kongfu}进行比武')
# 为了验证多继承,创建学校类 
class School(object):
    def __init__(self):
        self.kongfu = '[武林第一拳法]'
    def make_cake(self):
        print(f'运用{self.kongfu}进行比武')

# 独创配方
class Prentice(School, Master):
    def __init__(self):
        self.kongfu = '[独创武术]'
    def make_cake(self):
        print(f'运用{self.kongfu}进行比武')
# 用徒弟类创建对象,调用实例属性和方法
daqiu = Prentice()
print(daqiu.kongfu) 
daqiu.make_cake()
print(Prentice.__mro__)

子类和父类具有同名属性和方法,默认使用子类的同名属性和方法。

1.4 子类调用父类的同名方法和属性 

class Master(object):
    def __init__(self):
        self.kongfu = '[独门拳法]'
    def make_cake(self):
        print(f'运用{self.kongfu}进行比武')
class School(object):
    def __init__(self):
        self.kongfu = '[武林第一拳法]'
    def make_cake(self):
        print(f'运用{self.kongfu}进行比武')
class Prentice(School, Master):
    def __init__(self):
        self.kongfu = '[独创拳法]'
    def make_cake(self):
# 如果是先调用了父类的属性和方法,父类属性会覆盖子类属性,故在调用属性前,先调用自己子类的初始化。       self.__init__()
        print(f'运用{self.kongfu}进行比武')
 # 调用父类方法,但是为保证调用到的也是父类的属性,必须在调用方法前调用父类的初始化。
    def make_master_cake(self):
        Master.__init__(self)
        Master.make_cake(self)
    def make_school_cake(self):
        School.__init__(self)
        School.make_cake(self)
daqiu = Prentice()
daqiu.make_cake()
daqiu.make_master_cake()
daqiu.make_school_cake()
daqiu.make_cake()

1.5 super()调用父类方法 

使用super() 可以自动查找父类。调用顺序遵循 __mro__ 类属性的顺序。比较适合单继承使用。

1.6 总结

继承的特点:

  • 子类默认拥有父类的所有属性和方法
  • 子类重写父类同名方法和属性
  • 子类调用父类同名方法和属性
  • super()快速调用父类方法 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值