7、派生屬性
屬性的覆蓋(派生屬性):子類也可以新增自己新的屬性或者在自己這裡重新定義這些屬性(不會影響到父類),需要注意的是,一旦重新定義了自己的屬性且與父類重名,那麼呼叫新增的屬性時,就以自己為準了(屬性的覆蓋)。
class person(object):
num = 10
def __init__(self, name):
self.name = name
print('person...')
class student(person):
num = 20 # 派生屬性,子類中的靜態屬性覆蓋父類中的靜態屬性,將會直接呼叫子類student的靜態屬性,不再呼叫父類中的靜態屬性
def __init__(self, name, age): # name是派生屬性那麼將不會執行父類中的name屬性,以自己為準
super().__init__(name) #呼叫父類中的__init__方法,初始化name,然後列印'person'
self.name = name # student.name=zs
self.age = age # student,age=10
print('student...') # 'student'
def eat(self):
print('***')
print(self.name) # zs
print(super().num) # 呼叫父類中的靜態屬性 #10
student = student('zs', 10)
print(student.name)
print(student.age)
student.eat()
print(student.num) #20
執行結果:
person...
student...
zs10
***zs
1020
8、私有屬性私有方法在繼承中的表現
父類中的私有方法和私有屬性都是不能被子類繼承下來的。
class person(object):
num = 10
__num1 = 20 # 私有類屬性
def __test1(self): # 私有類方法
print('__test1__....')
def test2(self):
print('person test2')
class student(person):
def test(self):
print('***')
print(student.num) # 10
# print(student.__num1) # 不能被繼承下來
def test3(self):
print('test3')
# self.test2
# self.__test1() # 父類的私有方法是不能被繼承下來的,執行報錯
student = student()
student.test()
# student.test2() # test2為父類私有屬性,子類無法呼叫,執行將報錯
student.test3()
執行結果;
***
10test3
9、抽象類
之前我們定義了person類實現了eat()、drink()方法,
每種人都會吃喝但是吃喝的地點不同,如果實現了方法體就浪費了。因此我們可以只定義eat()方法,不實現方法體,這種形式我們可以將方法定義為抽象方法,具有抽象方法的類就叫做抽象類。
抽象類是乙個特殊的類,只能被繼承,不能例項化,抽象類中可以有抽象方法和普通方法。
(1).定義抽象類
定義抽象類需要匯入 abc模組。from abc import abcmeta, abstractmethod
(2).定義抽象方法
抽象方法:只定義方法,不具體實現方法體。
在定義抽象方法時需要在前面加入:@abstractmethod
抽象方法不包含任何可實現的**,因此其函式體通常使用pass。
注意:子類繼承了抽象類父類,子類必須實現父類的抽象方法。
練習1:定義乙個animal抽象類,定義eat()、sleep()抽象方法,定義兩個子類繼承animal抽象類。
簡單舉例:
from abc import abcmeta, abstractmethod
# 建立抽象類
class animal(metaclass=abcmeta):
# 抽象方法
@abstractmethod
def eat(self): pass
@abstractmethod
def sleep(self): pass
# 可以定義普通方法
def play(self):
print('轉悠...')
class dog(animal):
def eat(self): 父類中定義了抽象方法,子類需要將該方法進行具體描述
print('吃**....')
def sleep(self): 同理
print('輕輕地睡覺,正如默默的看家護院')
dog = dog()
dog.play()
執行結果;
轉悠...
Python 繼承基礎
一 永不變的三個問答 1 什麼是繼承 繼承一種新建類的方式,新建的類稱之為子類 派生類,被繼承的類稱之為父類 基類 超類 2 為什麼要用繼承 減少類與類之間 元素 3 如何用繼承 class parent1 繼承的父類 pass print parent1.bases class parent2 子...
python基礎 繼承
class a object pass 父類,基類,超類 class b pass 父類,基類,超類 class a son a,b pass 子類,派生類 class ab son a pass 子類,派生類 乙個類 可以被多個類繼承 乙個類 可以繼承多個父類 python裡 print a so...
Python 物件導向的繼承特性
一 繼承 乙個類可以派生出子類,在這個父類裡定義的屬性 方法自動被子類繼承 1 py2,經典類是按照深度優先來繼承的,新式類是按照廣度優先來繼承的 2 py3,經典類與新式類都是按照廣度優先進行繼承的 3 的復合使用 class b object definit self class a objec...