Python 物件導向 繼承 組合

2022-10-11 02:39:14 字數 1448 閱讀 4885

1.組合

將自定義類的物件作為類的屬性
class teacher:

def __init__(self, name):

self.name = name

class student:

def __init__(self, name, teacher):

self.name = name

self.teacher = teacher

tec = teacher('zhangsan')

stu = student('lisi', tec)

print(stu.teacher.name)

2.繼承

2.1 繼承

繼承:子類與父類形成的一種關係,可以讓子類能直接從父類中獲取屬性與方法

優點:減少**冗餘

2.2 語法
class 類名(父類名):pass

繼承關係:

1.父類的所有未封裝的屬性和方法,子類都能訪問

2.父類的所有封裝的屬性和方法,子類都不能訪問

--外界通過子類或子類物件,都不能訪問

--在子類內部也不能訪問

2.3 方法的重寫
有繼承關係下的屬性查詢順序:

-優先找自身,自身沒有找父類

-父類沒有找父類的父類

-(python3)一直找到最頂級的父類,如果還沒有就報錯

抽離-派生理解:

先寫子類, 抽離 出父類

先寫父類, 派生 出子類

先寫好父類的方法,由於父類方法的功能不滿足子類需求

子類還可以重寫父類方法:方法名與父類相同,自定義方法的實現體

2.4 重用
還需要父類方法的功能,在父類方法的基礎上再新增新功能

突破點:在子類中去呼叫父類的方法,還***呼叫者是子類

2.5 __init__結合super()方法
預設父級的__init__可以被繼承過來

但是會出現子類物件的屬性比父類多

例子:def __init__(self, name, salary):

super().__init__(name) # 父級有的共性功能通過super()交給父級做,子類特有的自己來完成

self.salary = salary

2.6 簡單的多繼承
子類可以繼承所有父類的所有可繼承屬性

屬性查詢順序:優先找自己的,沒有則按照繼承先後順序查詢父級

類名.mro() # 列印屬性查詢的順序

2.7 經典類和新式類
經典類:python2中才有,沒有繼承任何類的類  深度優先

新式類:python2中直接或間接繼承object的類

python3中所定義的所有類都是新式類 廣度優先

python 物件導向 組合與繼承

1 組合是使用其他的類例項作為自己的乙個屬性 has a關係 class doginfo def init self,name,age self.name name self.age age def p info self print name is age is format self.name,...

物件導向繼承 寄生式組合繼承

2.子類建構函式 function ministudent name,age,混合繼承 物件冒充 建構函式中屬性和方法 原型鏈繼承 繼承原型物件中屬性和方法 4.原型鏈繼承 object.create 以原型為基礎建立物件 ministudent.prototype object.create st...

python 面向繼承物件 繼承

1.python物件導向的繼承指的是多個類之間的所屬關係,即預設繼承父類的所有屬性和方法。2.注意 當乙個類有多個父類的時候,預設使用第乙個父類的同名屬性和方法。3.檢視某個類的繼承關係 物件.mro 4.子類呼叫父類的同名方法和屬性 class a object definit self self...