打印
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.多态
多态是面向对象的三大特征之一 。
- 最神秘的三座陵墓,一座不能挖,一座不敢挖,另一座挖不动
- 明明是一代传奇词人,偏偏无奈生在帝王家
- 一个开创出了盛世,同时也是历史上最大的败家子的帝王
- 宋仁宗:历史上最宽仁的皇帝之一却也难过美人关
- 一条杆棒等身齐:揭开太祖赵匡胤的武功有多高
- 乾隆皇帝一生最大的过错是什么?他为何这样做
- 三国十大家门不幸的美女:最后一个让人脊背发凉
- 【地图学】二、地图矢量化
- 【批量改文件夹中的图片名称-python】
- 60升电热水器功率一般多大