继承
1)基本
继承是面向对象的三大特征之一 (继承,封装,多态)
通过继承可以使一个类获取到其它类中的方法和属性
定义时,在类名后的括号指定当前类的 父类(超类,基类,super)
class Animals: name = "dogs" class Dog(Animals): def bark(self): print('汪汪汪!') class Chai(Dog): pass d = Dog() c = Chai() print(d.name) print(c.name) c.bark() ''' dogs dogs 汪汪汪! '''
2)默认情况
-
在创建类时,如果省略(
class xxxx:
)了父类,则默认父类为object- object是所有类的父类,所有类都继承自object
3)isinstance
和 issubclass
isinstance() 检查一个对象是否是另一个对象的实例
issubclass() 检查一个类是否是另一个类的子类
4)重写
如果类中有同名的方法,实例在调用时,会先调用子类的方法,而不是父类的方法,这个特点就叫做重写
-
当我们调用一个对象的方法时,会优先去当前对象中寻找是否具有该方法
如果有直接调用;
如果没有去当前对象中的父类中寻找,如果父类中有则继续调用;
如果该父类中没有,继续去该父类的父类中寻找,以此类推;
直到找到object,如果还是没有,则报错
-
举例
class A(Object): def test(self): print('AAA') class B(A): def test(self): print('BBB') class C(B): def test(self): print('CCC') c = C() c.test() ''' CCC ''' c.hello() ''' [报错error] '''
5)super()
可直接获取当前类的父类
通过super()返回对象调用父类方法时,不需要传递self
6)多重继承
类名 . __ bases __
-
多重继承可以为一个类同时指定多个父类
可以在类名的()后边添加多个类,实现多重继承
多重继承会使子类同时拥有多个父类,并且会获取到所有父类的方法
-
举例
class Dad: def test(self): print('Dad') class A(Dad): def __init__(self, name): self.__name__ = name def test(self): print('AAAA') class B(A): def test1(self): print('BBBB') class C(B, A): def test1(self): print('CCCC') b = B('狗') b.test() ''' AAAA '''