Python的继承与多态
Python继承的基本概念继承是面向对象编程的重要特性允许一个类子类继承另一个类父类的属性和方法。子类可以复用父类的代码并扩展或修改父类的行为。语法示例classParentClass:defparent_method(self):print(Parent method)classChildClass(ParentClass):defchild_method(self):print(Child method)继承的类型单继承一个子类只继承一个父类这是最简单的继承形式。多继承Python支持多继承一个子类可以继承多个父类。多继承的语法是用逗号分隔多个父类。classFather:deffather_method(self):print(Father method)classMother:defmother_method(self):print(Mother method)classChild(Father,Mother):pass方法重写子类可以重写父类的方法以提供特定的实现。当子类对象调用该方法时将执行子类中的版本。classParent:defmethod(self):print(Parent method)classChild(Parent):defmethod(self):print(Child method)super()函数super()函数用于调用父类的方法常用于方法重写时扩展父类行为而非完全替代。classParent:defmethod(self):print(Parent method)classChild(Parent):defmethod(self):super().method()print(Child method)Python多态的基本概念多态指同一操作作用于不同对象时可以有不同的解释和执行结果。在Python中多态通过方法重写和鸭子类型实现。多态特点不需要强制继承关系鸭子类型只要有同名方法就能传进去非常灵活鸭子类型Python的多态主要依赖于鸭子类型Duck Typing即“如果它走起来像鸭子叫起来像鸭子那么它就是鸭子”。不关心对象的类型只关心对象的行为。classDog:defspeak(self):returnWoof!classCat:defspeak(self):returnMeow!defanimal_sound(animal):print(animal.speak())dogDog()catCat()animal_sound(dog)# 输出: Woof!animal_sound(cat)# 输出: Meow!抽象基类ABC虽然Python支持鸭子类型但有时需要强制子类实现特定方法。abc模块提供了抽象基类的支持。fromabcimportABC,abstractmethodclassAnimal(ABC):abstractmethoddefspeak(self):passclassDog(Animal):defspeak(self):returnWoof!# 未实现speak方法会报错classCat(Animal):pass多态与继承的结合多态常与继承结合使用子类重写父类方法以实现不同行为。classAnimal:defspeak(self):raiseNotImplementedError(Subclass must implement abstract method)classDog(Animal):defspeak(self):returnWoof!classCat(Animal):defspeak(self):returnMeow!animals[Dog(),Cat()]foranimalinanimals:print(animal.speak())方法解析顺序MRO在多继承中Python使用C3线性化算法确定方法查找顺序可通过__mro__属性或mro()方法查看。classA:passclassB(A):passclassC(A):passclassD(B,C):passprint(D.__mro__)继承中的属性访问子类可以访问父类的属性和方法私有属性以__开头会被名称修饰name mangling无法直接访问。classParent:def__init__(self):self.publicPublicself.__privatePrivateclassChild(Parent):defshow(self):print(self.public)# 可访问print(self.__private)# 报错三大特性总结封装把属性 / 方法藏起来继承子类复用父类代码多态同一方法不同表现