super用法
先知道干啥用的,那么就需要看下类的继承,继承有两种方式
继承1
class P:
def m(self):
print("P class")
class C(P):
def m(self):
print("C class")
# 这里是需要调用父类的m方法
P.m(self)
if __name__ == "__main__":
c = C()
c.m()
继承2
class P:
def m(self):
print("P class")
class C(P):
def m(self):
print("C class")
super().m() # 这里用super的好处就是更改父类时不用再改这里,直接改上面就行
if __name__ == "__main__":
c = C()
c.m()
继承构造方法1
为什么要单独说构造方法,因为如果只继承类方法那么就是上例,但是要更改子类的构造方法就需要继承父类的构造方法
class P:
def __init__(self):
print("P class __init__")
# def __init__(self, name):
# self.name = name 这里记录下:python没有重载,重载的目的是 1.参数类型 2.参数个数,python都不需要
class C(P):
def __init__(self):
super().__init__() # 如果子类有构造方法,必须继承父类的构造方法
print("C class __init__")
if __name__ == "__main__":
c = C()
继承构造方法2
构造方法中有参数传递
class P:
def __init__(self, name):
self.name = name
print(f"P class __init__ {self.name}")
class C1(P):
def __init__(self, name):
super().__init__(name) # 如果子类有构造方法,必须继承父类的构造方法
print("C class __init__")
class C2(P):
def __init__(self):
self.name = "YaoMing"
super().__init__(self.name) # 如果子类有构造方法,必须继承父类的构造方法
print("C class __init__")
if __name__ == "__main__":
# 第一种调用方式
c1 = C1("YaoMing")
# 第二种调用方式
c2 = C2()
继承构造方法3
子类调用父类构造方法中的参数
class P:
def __init__(self):
self.name = "YaoMing"
print(f"P class __init__ {self.name}")
class C(P):
def __init__(self):
super().__init__() # 如果子类有构造方法,必须继承父类的构造方法
print("C class __init__")
print(f"In C class parent class param: {self.name}")
if __name__ == "__main__":
c = C()
print(c.name)
总结
- 继承就是基本上把父类拿过来了(不包括你改过的地方,如果没改基本一样)