python基礎 繼承特性

2021-09-09 06:34:24 字數 2952 閱讀 5479

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...