Python3 類的繼承

2022-08-18 11:00:13 字數 3781 閱讀 4570

目錄初識繼承

尋找繼承關係

繼承背景下的物件屬性查詢順序

派生新式類和經典類

鑽石繼承

通過繼承實現修改json模組資料型別

繼承指的是一種新建類的方法, 新建的類稱之為子類或者派生類

子類繼承的類叫做父類, 也稱之為基類或者超類

繼承的目的是減少**的冗餘(減少重複**)

在定義類時候, 通過class 子類(父類):實現繼承

下面我們就通過**來實現繼承

# 父類

class parentclass1:

pass

# 父類

class parentclass2:

pass

# 子類 單繼承

class childclass1(parentclass1):

pass

# 子類 多繼承

class childclass2(parentclass1, parentclass2):

pass

我們可以通過__bases__方法來檢視當前類繼承的父類

# 檢視當前類的父類

print(childclass1.__bases__) # (,)

print(childclass2.__bases__) # (, )

# 父類

class pyman:

language = 'python'

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

self.name = name

self.age = age

self.gender = gender

# 老師類

class pyteacher(pyman):

def teach_python(self):

print(f'老師在教python...')

# 學生類

class pystudent(pyman):

def learn_python(self):

print(f'學生在學python...')

teacher = pyteacher('龜叔', 18, 'female')

student = pystudent('mrbigb', 17, 'male')

print(teacher.name, teacher.age, teacher.gender) # 龜叔 18 female

print(student.name, student.age, student.gender) # mrbigb 17 male

teacher.teach_python() # 老師[龜叔]在教python...

student.learn_python() # 學生[mrbigb]在學python...

class parentclass:

def f1(self):

print('from parentclass.f1')

def f2(self):

print('from parentclass.f2')

class childclass(parentclass):

def f1(self):

print('from childclass.f1')

obj = childclass()

obj.f1() # from childclass.f1

obj.f2() # from parentclass.f2

class pyman:

language = 'python'

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

self.name = name

self.age = age

self.gender = gender

# 老師類

class pyteacher(pyman):

def __init__(self, name, age, gender, salary):

super().__init__(self, name, age, gender)

self.salary = salary

def teach_python(self):

print(f'老師在教python...')

# 學生類

class pystudent(pyman):

def __init__(self, name, age, gender, class_no):

super().__init__(self, name, age, gender)

self.class_no = class_no

def learn_python(self):

print(f'學生在學python...')

我們也可以通過子類.mro()方法檢視方法解析順序

class g:

pass

class e(g):

pass

class b(e):

pass

class f(g):

pass

class c(f):

pass

class d(g):

pass

class a(b, c, d):

pass

print(a.mro())

'''[, , , , , , , ]

'''

# 增加date和datetime兩種資料型別

import json

from datetime import date, datetime

dict =

class myjson(json.jsonencoder):

def default(self, o):

if isinstance(o, datetime):

return o.strftime('%y-%m-%d %x')

elif isinstance(o, date):

return o.strftime('%y-%m-%d')

else:

return super().default(self, o)

res = json.dumps(dict, cls=myjson) # # cls=none,預設指向的是原json的jsonencoder

print(res)

#

python3 類的繼承

基本語法 class derivedclassname baseclassname1 1 需要注意圓括號中父級類的順序,若是父級類中有相同的方法名,而在子類使用時未指定,python從左至右搜尋 即方法在子類中未找到時,從左到右查詢父級類中是否包含方法。示例 class a object pass ...

Python3 類的繼承

coding utf 8 物件導向程式設計的三個特點 封裝 繼承 多型 函式是封裝 的基本單位,類和物件的封裝是屬於更高階的封裝方式 在類中經常會宣告一些物件屬性,用來儲存資料的,在類中宣告的函式,是用來運算元據的,不同的功能可以封裝成不同的函式 繼承 特點 1.子類繼承父類,子類擁有父類的所有屬性...

Python3 類和物件 繼承

class derivedclassname baseclassname 子類 父類 如果子類中定義與父類同名的方法或屬性,則會自動覆蓋父類對應的方法或屬性,父類中的方法不受影響 1 呼叫未繫結的父類方法 class a def init self print 進入a print 離開a class...