日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python类方法继承_python类的继承

發(fā)布時(shí)間:2025/3/12 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python类方法继承_python类的继承 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、概述

面向?qū)ο缶幊?(OOP) 語(yǔ)言的一個(gè)主要功能就是“繼承”。繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能,并在無(wú)需重新編寫(xiě)原來(lái)的類的情況下對(duì)這些功能進(jìn)行擴(kuò)展。

通過(guò)繼承創(chuàng)建的新類稱為“子類”或“派生類”,被繼承的類稱為“基類”、“父類”或“超類”,繼承的過(guò)程,就是從一般到特殊的過(guò)程。在某些 OOP 語(yǔ)言中,一個(gè)子類可以繼承多個(gè)基類。但是一般情況下,一個(gè)子類只能有一個(gè)基類,要實(shí)現(xiàn)多重繼承,可以通過(guò)多級(jí)繼承來(lái)實(shí)現(xiàn)。

繼承概念的實(shí)現(xiàn)方式主要有2類:實(shí)現(xiàn)繼承、接口繼承。

實(shí)現(xiàn)繼承是指使用基類的屬性和方法而無(wú)需額外編碼的能力。

接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實(shí)現(xiàn)的能力(子類重構(gòu)爹類方法)。

在考慮使用繼承時(shí),有一點(diǎn)需要注意,那就是兩個(gè)類之間的關(guān)系應(yīng)該是“屬于”關(guān)系。例如,Employee 是一個(gè)人,Manager 也是一個(gè)人,因此這兩個(gè)類都可以繼承 Person 類。但是 Leg 類卻不能繼承 Person 類,因?yàn)橥炔⒉皇且粋€(gè)人。

OO開(kāi)發(fā)范式大致為:劃分對(duì)象→抽象類→將類組織成為層次化結(jié)構(gòu)(繼承和合成) →用類與實(shí)例進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)幾個(gè)階段。

二、類的繼承

2.1 繼承的定義

class Person(object): # 定義一個(gè)父類

def talk(self): # 父類中的方法

print("person is talking....")

class Chinese(Person): # 定義一個(gè)子類, 繼承Person類

def walk(self): # 在子類中定義其自身的方法

print('is walking...')

c = Chinese()

c.talk() # 調(diào)用繼承的Person類的方法

c.walk() # 調(diào)用本身的方法

# 輸出

person is talking....

is walking...

2.2 構(gòu)造函數(shù)的繼承

如果我們要給實(shí)例 c 傳參,我們就要使用到構(gòu)造函數(shù),那么構(gòu)造函數(shù)該如何繼承,同時(shí)子類中又如何定義自己的屬性?

繼承類的構(gòu)造方法:

1.經(jīng)典類的寫(xiě)法: 父類名稱.__init__(self,參數(shù)1,參數(shù)2,...)

2. 新式類的寫(xiě)法:super(子類,self).__init__(參數(shù)1,參數(shù)2,....)

class Person(object):

def __init__(self, name, age):

self.name = name

self.age = age

self.weight = 'weight'

def talk(self):

print("person is talking....")

class Chinese(Person):

def __init__(self, name, age, language): # 先繼承,在重構(gòu)

Person.__init__(self, name, age) #繼承父類的構(gòu)造方法,也可以寫(xiě)成:super(Chinese,self).__init__(name,age)

self.language = language # 定義類的本身屬性

def walk(self):

print('is walking...')

class American(Person):

pass

c = Chinese('bigberg', 22, 'Chinese')

如果我們只是簡(jiǎn)單的在子類Chinese中定義一個(gè)構(gòu)造函數(shù),其實(shí)就是在重構(gòu)。這樣子類就不能繼承父類的屬性了。所以我們?cè)诙x子類的構(gòu)造函數(shù)時(shí),要先繼承再構(gòu)造,這樣我們也能獲取父類的屬性了。

子類構(gòu)造函數(shù)基礎(chǔ)父類構(gòu)造函數(shù)過(guò)程如下:

實(shí)例化對(duì)象c ----> c 調(diào)用子類__init__() ---- > 子類__init__()繼承父類__init__() ----- > 調(diào)用父類 __init__()

2.3 子類對(duì)父類方法的重寫(xiě)

如果我們對(duì)基類/父類的方法需要修改,可以在子類中重構(gòu)該方法。如下的talk()方法

class Person(object):

def __init__(self, name, age):

self.name = name

self.age = age

self.weight = 'weight'

def talk(self):

print("person is talking....")

class Chinese(Person):

def __init__(self, name, age, language):

Person.__init__(self, name, age)

self.language = language

print(self.name, self.age, self.weight, self.language)

def talk(self): # 子類 重構(gòu)方法

print('%s is speaking chinese' % self.name)

def walk(self):

print('is walking...')

c = Chinese('bigberg', 22, 'Chinese')

c.talk()

# 輸出

bigberg 22 weight Chinese

bigberg is speaking chinese

三、類繼承的事例

class SchoolMember(object):

'''學(xué)習(xí)成員基類'''

member = 0

def __init__(self, name, age, sex):

self.name = name

self.age = age

self.sex = sex

self.enroll()

def enroll(self):

'注冊(cè)'

print('just enrolled a new school member [%s].' % self.name)

SchoolMember.member += 1

def tell(self):

print('----%s----' % self.name)

for k, v in self.__dict__.items():

print(k, v)

print('----end-----')

def __del__(self):

print('開(kāi)除了[%s]' % self.name)

SchoolMember.member -= 1

class Teacher(SchoolMember):

'教師'

def __init__(self, name, age, sex, salary, course):

SchoolMember.__init__(self, name, age, sex)

self.salary = salary

self.course = course

def teaching(self):

print('Teacher [%s] is teaching [%s]' % (self.name, self.course))

class Student(SchoolMember):

'學(xué)生'

def __init__(self, name, age, sex, course, tuition):

SchoolMember.__init__(self, name, age, sex)

self.course = course

self.tuition = tuition

self.amount = 0

def pay_tuition(self, amount):

print('student [%s] has just paied [%s]' % (self.name, amount))

self.amount += amount

t1 = Teacher('Wusir', 28, 'M', 3000, 'python')

t1.tell()

s1 = Student('haitao', 38, 'M', 'python', 30000)

s1.tell()

s2 = Student('lichuang', 12, 'M', 'python', 11000)

print(SchoolMember.member)

del s2

print(SchoolMember.member)

# 輸出

----end-----

just enrolled a new school member [haitao].

----haitao----

age 38

sex M

name haitao

amount 0

course python

tuition 30000

----end-----

just enrolled a new school member [lichuang].

3

開(kāi)除了[lichuang]

2

開(kāi)除了[Wusir]

開(kāi)除了[haitao]

總結(jié)

以上是生活随笔為你收集整理的python类方法继承_python类的继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。