"""
在⾯向对象的世界中存在着继承关系,我们现实中也存在着这样的关系,我们说过x是一种y, 那x就可以继承y,这是理解层面上的。如果上升到代码层面, 我们可以这样认为子类在不影响⽗类的程序运行的基础上对⽗类进行的扩充和扩展。这里我们可以把父类被称为超类或者基类. 子类被称为派生类。
代码实现
继承关系在代码上体现为二种形式:
1. 子类继承自抽象类或普通类
2. 子接口继承自父接口:适用于Java
"""
# 首先, 类名和对象默认是可以作为字典的key的,因为类名和对象都是可以哈希的。
dic = {}
dic[Foo] = 123
dic[Foo()] = 456
print(dic) # {<class '__main__.Foo'>: 123, <__main__.Foo object at 0x103491550>: 456}
# self在访问⽅法的顺序: 永远先找⾃己的. ⾃己的找不到再找父类的
class F3(object):
def f1(self):
ret = super().f1() # 2、继续执行下个继承父类
print(ret) # 4、ret没有返回值所以print None
return 123 # 5 返回调用者 123
class F2(object):
def f1(self):
print('123') # 3、执行print(123) 没有返回值
class F1(F3, F2): # 查找顺序: 1、⾃己的类中没有f1(),找父类的
pass
obj = F1()
obj.f1() # 6 调用这拿到了返回值,但是没有打印,所以最终结果为 123 None