目錄初識繼承
尋找繼承關係
繼承背景下的物件屬性查詢順序
派生新式類和經典類
鑽石繼承
通過繼承實現修改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...