面向对象-三大特性-资源的继承和使用。
# 1.继承和使用:资源的使用权限,测试在子类中能不能访问到父类的资源
class Person:
name = 'Tom' # 公有属性
_age = 18 # 受保护属性
__sex = '男' # 私有属性
def __init__(self):
print('init方法')
def func1(self):
print('公有方法')
def _func2(self):
print('受保护方法')
def __func3(self):
print('私有方法')
class Dad(Person): # 继承Person
def test(self):
print(self.name)
print(self._age)
# print(self.__sex) # AttributeError: 'Dad' object has no attribute '_Dad__sex'
self.func1()
self._func2()
# self.__func3() # AttributeError: 'Dad' object has no attribute '_Dad__func3'
self.__init__()
# 除了私有属性和私有方法其他都能访问
# 子类中时能使用父类资源,无法修改
name = 'jerry' # 这里是Dad中新增一个属性,并不是改变Person内的name属性
# 继承关系和资源查找流程见图-----继承关系和资源查找流程.png
# 继承关系和资源查找在python2中遵循MRO原则,但是按照栈原理会违背重写可用原则,所以python3中放弃使用
# 通过print(Dad.mro())可以查看继承顺序
d = Dad()
d.test()
class Sun(Dad):
pass
print(Sun.mro()) # [<class '__main__.Sun'>, <class '__main__.Dad'>, <class '__main__.Person'>, <class 'object'>]