版权声明:转载请注明出处~ 摸摸博主狗头 https://blog.csdn.net/cris_zz/article/details/83816653
文章目录
1、继承的特性
# 通过继承可以使得子类很好的复用父类的代码,减少冗余代码,同时更加符合现实逻辑(编程就是对现实世界的抽象),符合 ocp 原则(open-change-principle)
# object 是一切类的超类,所有对象都是object 的实例
'''
方法的覆写:和Java 类似,子类可以对父类的方法进行覆写,子类实例调用的时候如果子类覆写则调用子类的方法,否则调用父类的方法(就近原则)
'''
# super:子类继承父类的所有方法(包括魔术方法),不仅可以重写普通方法,还可以重写魔术方法,以__init__方法为例,在子类的方法里通过 super 调用父类的方法
class Animal(object):
def __init__(self, name):
self._name = name
def run(self)->None:
print('动物在奔跑')
def eat(self, food: str)->None:
print('动物在吃:%s' % food)
@property
def name(self):
return self._name
@name.setter
def name(self, name):
self._name = name
class Dog(Animal):
def __init__(self, name, age):
# 通过super 调用父类的__init__ 方法来初始化父类定义的属性,不需要再传递self 参数
super().__init__(name)
self._age = age
def bar(self):
print('狗在嚎叫!')
def run(self):
print('狗在奔跑~')
d1 = Dog('cris', 11)
d1.run() # 动物在奔跑/狗在奔跑
d1.eat('狗粮') # 动物在吃:狗粮
d1.bar() # 狗在嚎叫!
print(isinstance(d1, Dog)) # True
print(isinstance(d1, Animal)) # True
print(issubclass(Dog, Animal)) # True
print(issubclass(Animal, Dog)) # False
2、Python 的多继承(了解)
# Python支持多继承!(了解)
# 实际开发中应该尽量避免多继承,否则会造成代码的逻辑复杂;多个父类拥有相同的方法,按照继承顺序,前面的父类覆盖后面的父类
class A(object):
def __init__(self):
super(A, self).__init__()
def func_a(self):
print('A中的方法')
class B(object):
def __init__(self):
super(B, self).__init__()
def func_b(self):
print("B中的方法")
class C(A, B):
def __init__(self):
super(C, self).__init__()
c = C()
c.func_a() # A中的方法
c.func_b() # B中的方法
print(C.__bases__) # (<class '__main__.A'>, <class '__main__.B'>)