最简单的继承
python 的继承是在类名的后面添加括号, 然后在括号中声明要继承的父类.
class Father:
def speak(self):
print("我是父类中的 speak 方法")
# Son继承 Father 类
class Son(Father):
pass
s = Son()
s.speak()
说明:
从字面上我们看到
Son
没有定义任何的方法, 但是由于Son
继承自Father
, 则Son
会继承Father
的所有属性和方法调用方法时, 方法的查找规则: 先在当前类中查找, 当前类找不到想要的方法, 则去父类中查找, 还找不到然后继续向上查找. 一旦找到则立即执行. 如果找到最顶层还找不到, 则会抛出异常
继承中的__init__()
的调用规则
如果子类没有手动__init__()
方法, 则 python 自动调用子类的__init__()
的时候, 也会自动的调用基类的__init()__
方法.
class Father:
def __init__(self):
print("基类的 init ")
# Son继承 Father 类
class Son(Father):
def speak(self):
pass
s = Son()
如果子类手动添加了__init__()
, 则 python 不会再自动的去调用基类的__init__()
class Father:
def __init__(self):
print("基类的 init ")
# Son继承 Father 类
class Son(Father):
def __init__(self):
print("子类的 init ")
def speak(self):
pass
s = Son()
如果想通过基类初始化一些数据, 则必须显示的调用这个方法, 调用语法是:
基类名.__init__(self, 参数...)
class Father:
def __init__(self, name):
print("基类的 init ")
self.name = name
def speak(self):
print("我是父类中的 speak 方法" + self.name)
# Son继承 Father 类
class Son(Father):
def __init__(self, name, age):
# name 属性的初始化应该交给基类去完成, 手动调用基类的方法. 一般放在首行
Father.__init__(self, name) # 调动指定类的方法, 并手动绑定这个方法的 self
print("子类的 init ")
self.age = age
s = Son("李四", 20)
s.speak()
print(s.name)
print(s.age)