一 python自动化基础能力:3.python基础上之数据类型,函数(20)


打印
erha1012
可以直接调用父类中的()来初始化父类中的属性,
class Animal:def __init__(self,name):self._name = namedef run(self):print('Running...')def sleep(self):print('Sleeping...')@propertydef name(self):return self._name@name.setterdef name(self,name):self._name = nameclass Dog(Animal):def __init__(self,name,age):Animal.__init__(self,name)self._age = agedef run(self):print('Dog is running...')def sleep(self):print('Dog is sleeping...')def Housekeep(self):print('Dog is housekeeping')@propertydef age(self):return self._age@age.setterdef age(self, age):self._age = aged = Dog('erha',10)print(d.name)print(d.age)
即Dog类中的初始化方法中,name属性通过的初始化调用获取,可以将父类的多个属性传给子类,但是继承的父类是固定的,这是需要用super()动态地继承父类属性 。
super()可以用来获取当前类的父类,并且通过super()返回的对象,调用父类方法时不需要传入self 。
class Animal:def __init__(self,name):self._name = namedef run(self):print('Running...')def sleep(self):print('Sleeping...')@propertydef name(self):return self._name@name.setterdef name(self,name):self._name = nameclass Dog(Animal):def __init__(self,name,age):super().__init__(name)self._age = agedef run(self):print('Dog is running...')def sleep(self):print('Dog is sleeping...')def Housekeep(self):print('Dog is housekeeping')@propertydef age(self):return self._age@age.setterdef age(self, age):self._age = aged = Dog('erha',10)print(d.name)print(d.age)
执行结果与之前相同 。
10.5 多重继承
语法:类名.bases
可以用来获取当前类的所有直接父类 。
class A(object):def test(self):print('A...')class B(A):def test2(self):print('B...')class C(B):passprint(C.__bases__)print(B.__bases__)print(A.__bases__)
打印
(,)(,)(,)
在中支持多重继承,即可以为一个类同时指定多个父类 。
class A(object):def test(self):print('A...')class B(object):def test2(self):print('B...')class C(A,B):passprint(C.__bases__)
打印(, ) 。
class A(object):def test(self):print('A...')class B(object):def test2(self):print('B...')class C(A,B):passc = C()c.test()c.test2()
打印
A...B...12
显然,子类可以同时继承多个父类的方法 。
但是一般在实际中没有特殊情况,尽量避免使用多重继承,因为多重继承会让代码过于复杂;
如果多个父类中有同名的方法,则会在第一个父类中寻找,找不到再继续往下寻找…
如,
class A(object):def test(self):print('A...test')class B(object):def test(self):print('B...test')def test2(self):print('B...')class C(A,B):passc = C()c.test()
会打印A...test
如果A中没有test()方法,
class A(object):passclass B(object):def test(self):print('B...test')def test2(self):print('B...')class C(A,B):passc = C()c.test()
会打印B...test
11.多态
多态是面向对象的三大特征之一 。