继承、多继承、魔法方法
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 ## 优先调用本身的方法
重写后还想使用父类中的功能
-
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才能调用实例
类中的一些查询相关信息的方法
Python继承与魔法方法精讲
本文深入探讨Python中的继承机制,包括单继承、多继承及方法重写,并详解魔法方法如__add__的使用,帮助理解类的高级特性。
1677

被折叠的 条评论
为什么被折叠?



