Python OOP:继承、单继承、多继承、__mro__、子类重写父类同名属性和方法、子类调用父类同名属性和方法、多层继承、super()、私有(实例)属性和方法、获取修改私有属性值、私有类属性

一、继承

Python⾯向对象的继承指的是多个类之间的所属关系,即⼦类默认继承⽗类的所有属性和⽅法

继承作用:继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
在这里插入图片描述
在Python中,所有类默认继承object类,object类是顶级类或基类;其他⼦类叫做派⽣类。

class Being:  # 定义一个类Being
    def __init__(self):  #初始化实例属性
        self.num = 1  #在类里面添加实例属性self.属性名=值

    def info_print(self):  # 定义一个实例方法
        print(self.num)  # 在类里面访问实例属性self.属性名

class People(Being):  # 定义一个类People,继承Being类
    pass

p1 = People()  # 创建People类的一个对象p1
p1.info_print()  # 对象调用父类实例方法
p1.num  # 对象访问父类实例属性

输出:1
class Being(object):
    def __init__(self):
        self.num = 1

    def info_print(self):
        print(self.num)

class People(Being):
    pass

p1 = People()
p1.info_print()

输出:1

二、单继承

单继承:一个子类继承一个父类
在这里插入图片描述

class Master:
    def __init__(self):
        self.kongfu = "古法配方"

    def make_cake(self):
        print("{}制作煎饼果子".format(self.kongfu))

class prentice(Master):
    pass

daqiu = prentice()
print(daqiu.kongfu)
daqiu.make_cake()

输出:
古法配方
古法配方制作煎饼果子

二、多继承

多继承:一个子类同时继承多个⽗类
当⼀个类有多个父类的时候,默认使用第⼀个父类的同名属性和方法。
在这里插入图片描述

class Master:
    def __init__(self):
        self.kongfu = "古法配方"
        self.age = 100

    def make_cake(self):
        print("{}制作煎饼果子".format(self.kongfu))

class School:
    def __init__(self):
        self.kongfu = "学校技术"
        self.name = "新东方"

    def make_cake(self):
        print("{}制作煎饼果子".format(self.kongfu))

class prentice(Master, School):
    pass

daqiu = prentice()
print(daqiu.kongfu)  # 同名属性,访问第一个父类的同名属性
daqiu.make_cake()  # 同名方法,访问第一个父类的同名方法

print(daqiu.age)  # 不同名属性,第一个父类正常
print(daqiu.name)  # 不同名属性,非第一个父类报错

输出:
在这里插入图片描述

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

⼦类和父类具有同名属性和方法,默认使用子类的同名属性和方法。
在这里插入图片描述

class Master:
    def __init__(self):
        self.kongfu = "古法配方"
        self.age = 100

    def make_cake(self):
        print("{}制作煎饼果子".format(self.kongfu))

class School:
    def __init__(self):
        self.kongfu = "学校技术"
        self.name = "新东方"

    def make_cake(self):
        print("{}制作煎饼果子".format(self.kongfu))

class prentice(Master, School):
    def __init__(self):
        self.kongfu = "独创配方"

    def make_cake(self):
        print("{}制作煎饼果子".format(self.kongfu))

daqiu = prentice()
print(daqiu.kongfu)  # 同名属性,重写父类
daqiu.make_cake()  # 同名方法,重写父类
#如果子类和父类有同名属性和方法,子类创建对象调用属性和方法,调用的是子类里面的同名属性和方法

# print(daqiu.age)  # 不同名属性,报错
print(daqiu.name)  # 不同名属性,报错

输出:
在这里插入图片描述

四、___mro___

Python的MRO即Method Resolution Order(方法解析顺序),即在调用方法时,会对当前类以及所有的基类进行一个搜索,以确定该方法之所在,而这个搜索的顺序就是MRO。

类名.__mro__,返回一个元组。

可以清晰地看到类的层级关系。

class Master:
    def __init__(self):
        self.kongfu = "古法配方"
        self.age = 100

    def make_cake(self):
        print("{}制作煎饼果子".format(self.kongfu))

class School(Master):
    def __init__(self):
        self.kongfu = "学校技术"
        self.name = "新东方"

    def make_cake(self):
        print("{}制作煎饼果子".format(self.kongfu))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值