1.10.继承、多继承、魔法方法

继承、多继承、魔法方法


python3 创建的类,默认继承 object父类/(顶级基类)超类

定义类的时候添加(object),兼容性较好

1.继承


定义:描述类与类的关系,(派生和类是同一个意思)

calss 类名(父类名1,2...) # 继承类

 

class A:
    def play(self):
        print('hello A')
class B:
    def play(self):
        print('hello B')
​
class C(A):  # C类 继承 A类(C是A的子类,A是C的父类)
    pass
    
 C_c = C()
 C_c.play()   # hello A

 

 

2.多继承


 

重写

  • 定义:子类继承父类之后,如果子类不想使用父类的方法,定义与父类中已有的方法来覆盖父类方法

  • 重写后再调用父类中的方法: 父类名.方法 / super().方法

class A:
    def play(self):
        print('hello A')
class B:
    def play(self):
        print('hello B')
​
class C(A,B):  # C类 继承 A B 两类 ——多继承
              # 按括号中继承顺序执行
    def play(self):
        print('hellp C')
    
​
C_c = C()
C_c.play()  # hello A  ## 优先调用本身的方法

重写后还想使用父类中的功能

  1. class C(A):
    def play(self):
        A.play(self)        # 调用
        supper().play()     # 调用  ## 找最近的上级父类
        print('hello C')

 

直接父类 —— base__

每个类中 “bases " 特殊属性(返回tuple)

bases:查看类的直接父类

class A():
    def play(self):
        print('hello world !')
        
class B(A):
    pass
        
class C(B):  # C 继承 A B 两类 ——多继承
    pass
​
C_c = C()
print(C.__bases__)      # 查看 C类的直接继承的父类
​
输出结果:
​
(<class '__main__.B'>,) # C 的直接父类是 B类

 

 

supper 函数可以调用父类的方法,父类也可以使用supper函数

类在生成时会自动生成方法解析顺序

类继承顺序 —— mro

可以通过 类名 “ .mro() ”或者类名“ .mro ” 查看

print(C.mro())   # 查看类的继承关系,返回列表
输出结果:
​
[<class '.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
​
print(C.__mro__) # 查看类的继承关系,返回元组
​
输出结果:
​
(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)

 

分类越细,越复杂

3.魔法方法


__add__(self, other)    # 进行加法运算的时候自用调用
# self 返回实例a , 
​
class A:
    def __add__(self, other): # 加法运算,参数规范
        print(self)     # self 返回实例a
        print(other)
​
a = A()
a + 2   # 传值到self  # 哪个实例在+号左边,则调用哪个参数 
                     # a 需写在代码左边,否则会报错
                     
b = 类名(参数)
C = 类名(参数)

 

 

[ str repr(字符串类型,必须要有返回值) call ]

有什么区别,又什么关键点,长什么样子

弄清楚在什么时候需要调用魔法方法!!!

class A:
    def __add__(self, other):  # 加法运算 参数规范
        print(self)
        print(other)
​
a = A()
a + 2    # 2  # 传值到self  # 哪个实例在+号左边,则调用哪               个参数  # a 需写在代码左边,否则会报错
print('a', a)

 

 

正常情况下,实例是不能像函数一样被调用的,要想实例能够被调用,就需要定义 call 方法.有call才能调用实例

 

 

类中的一些查询相关信息的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值