重写str方法/多继承

  1. object有一个__str__()方法,用于返回一个对于对象的描述。内置函数str(对象),调用的就是__str__()
  2. __str__()经常用于print()方法,帮助我们查看对象的信息。__str__()可以重写

多重继承

Python支持多重继承,一个子类可以有多个直接父类。

class A:
  def aa(self):
    print("aa")
​
class B:
  def bb(self):
    print("bb")
​
class C(B,A):
  def cc(self):
    print("cc")
​
c = C()
c.cc()
c.bb()
c.aa()

MRO方法解析顺序

Python支持多继承,如果父类中有相同名字的方法,在子类中没有指定父类名是,解释器将从左向右按顺序搜索。

MRO(Method Resolution Order):方法解析顺序。我们可以通过mro()方法获得类的层次结构,方法解析顺序也是按照这个类的层次结构寻找的。

class A:
  def aa(self):
    print("aa")
​
  def say(self):
    print("say AAA!")
​
class B:
  def bb(self):
    print("bb")
​
  def say(self):
    print("say BBB!")
class C(B,A):
  def cc(self):
    print("cc")
​
c = C()
print(C.mro())     #打印类的层次结构 
# [<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]

c.say()         #解释器寻找方法是“从左到右”的方式寻找,此时会执行B类中的say()
# say BBB!

super()获得父类的定义

在子类中,如果想要获得弗雷德方法,可以通过super()来实现。

super()代表父类的定义,不是父类对象。

调用父类的构造方法:super(子类名称,self).__init__(参数列表)

class A:
  def __init__(self):
    print("A的构造方法")
​
  def say(self):
    print("A: ",self)
    print("say AAA")
​
class B(A):
  def __init__(self):
    super(B,self).__init__() #调用父类的构造方法
    print("B的构造方法")
  def say(self):
    #A.say(self)   调用父类的say方法
    super().say()  #通过super()调用父类的方法
    print("say BBB")
​
b = B()
b.say()

多态:同一个方法调用由于对象不同,产生不同的行为。

多态是方法的多态,属性没有多态。

多态的存在有两个必要条件:继承、方法重写

class Animal:
    def shout(self):
        print("动物叫了一声")

class Dog(Animal):
    def shout(self):
        print("小狗汪汪汪")

class Cat(Animal):
    def shout(self):
        print("小猫喵喵喵")

def animalShout(a):
    a.shout()

animalShout(Dog())    # 小狗汪汪汪
animalShout(Cat())    # 小猫喵喵喵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值