继承是一种建立类的方法,一个类能够继承一个或多个父类,原始类称为基类或超类。
继承能够很方便的帮助子类拥有父类的属性和方法,减小代码冗余,子类能够定义本身的方法和属性,也能够覆盖父类的方法和属性。html
class Animal(): def __init__(self, kind, age): self.kind = kind self.age = age print("这是父类的__init__方法") def info(self): print('这是一只' + self.kind, ',今年' + self.age + '岁了') animal = Animal('狗', '5') animal.info() # 这是父类的__init__方法 # 这是一只狗 ,今年5岁了
class Cat(Animal): pass # 不想向类中添加任何其余的属性或者方法,可使用关键字pass cat = Cat('猫','3') cat.info() # 这是父类的__init__方法 # 这是一只猫 ,今年3岁了
__init__()
方法后,会在建立对象时自动调用。你能够在子类中从新建立一个__init__()
方法,这样既能够继承父类的属性,又能够给这个子类添加新的属性:python
class Cat(Animal): def __init__(self, kind, age, name): self.kind = kind self.age = age self.name = name print("这是子类的__init__方法") def info(self): # 若是在子类中添加一个父类同名的方法,会覆盖父类的方法 print('这是一只' + self.kind, ',今年' + self.age + '岁了', '它的名字是'+self.name) cat = Cat('猫, '3', 'xixi') cat.info() # 这是子类的__init__方法 # 这是一只猫,今年3岁了 它的名字是xixi
如上所示,在子类中添加了一个info()
方法,这是一个和父类中的方法同名的方法,会覆盖父类原有的方法。当你须要子类中用特殊或不一样的功能时就能够这样作。code
class DerivedClassName(Base1, Base2, Base3): <statement-1> ... <statement-N>
须要注意圆括号中基类(父类)的顺序,如果基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。htm
class Parent(object): def info(self): print('This is Parent') def show(self): print("show time") class A(Parent): # 继承Parent def info(self): # 自动覆盖父类的此方法 print('This is A') class B(Parent): # 继承Parent def info(self): print('This is B') class C(A, B): # 继承A,B pass
info()
方法,输出的是This is A
,由于A类自身的info方法会覆盖父类Parent中的info方法。而用实例对象调用show()
方法调用的是父类Parent中的方法,由于A类中没有这个方法,因此会去父类中查找。对象
a = A() a.info() # 输出:This is A a.show() # 输出:show time
b = B() b.info() # 输出:This is B a.show() # 输出:show time
info()
方法时,须要注意一下这个info()
方法是哪一个父类中的方法。只要记住查找的顺序是从左至右就能够了,因此最终调用的是父类A中的info()
方法。c = C() c.info() # 输出: This is A