python 物件導向 組合與繼承

2021-10-06 16:42:46 字數 2530 閱讀 8545

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, self.age))

class dog():

def __init__(self, name, age):

self.info = doginfo(name, age) # has a doginfo

def change_name(self, name):

self.info.name = name

def p_info(self):

self.info.p_info()

dog = dog("dido", 4)

dog.change_name("tom")

dog.p_info()

# 執行結果

name is tom, age is 4.

2、子類繼承父類的屬性和方法(is a 關係);

(1)  子類不重寫父類的構造方法(__init__)和方法,例項化子類時,會自動呼叫父類定義的__init__和方法。

# 子類不重寫父類的構造方法(__init__)和方法,例項化子類時,會自動呼叫父類定義的__init__和方法

class father():

def __init__(self, name):

self.name = name

print("name: %s" % self.name)

def getname(self):

return "father: " + self.name

class son(father):

pass

if __name__ == "__main__":

son = son("麻花")

print(son.getname())

# 執行結果:

name: 麻花

father: 麻花

(2) 重寫父類的構造方法(__init__)和方法,例項化子類時,就不會呼叫父類已定義好的__init__和方法。

# 重寫父類的構造方法(__init__)和方法,例項化子類時,就不會呼叫父類已定義好的__init__和方法

class father():

def __init__(self, name):

self.name = name

print("name: %s" % self.name)

def getname(self):

return "father: " + self.name

class son(father):

def __init__(self, name):

print("hello")

self.name = name

def getname(self):

return "son: " + self.name

if __name__ == "__main__":

son = son("麻花")

print(son.getname())

# 執行結果:

hello

son: 麻花

(3) 如果重寫了父類的構造方法(__init__)和方法,要繼承父類的構造方法__init__和方法,可以使用 super 關鍵字。

# 如果重寫了父類的構造方法(__init__)和方法,要繼承父類的構造方法__init__和方法,可以使用 super 關鍵字

class father():

def __init__(self, name):

self.name = name

print("name: %s" % self.name)

def getname(self):

return "father: " + self.name

class son(father):

def __init__(self, name):

print("hello")

# super(son, self).__init__(name)

father.__init__(self, name)

def getname(self):

# return super(son, self).getname()

return father.getname(self)

if __name__ == "__main__":

son = son("麻花")

print(son.getname())

# 執行結果:

hello

name: 麻花

father: 麻花

3、優先使用組合保持**簡單。

Python 物件導向 繼承 組合

1.組合將自定義類的物件作為類的屬性class teacher def init self,name self.name name class student def init self,name,teacher self.name name self.teacher teacher tec tea...

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

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