什么是類的繼承压状?
類的繼承就是讓子類擁有父類的屬性和方法蚊荣。
類繼承格式:
class 子類名(父類1,父類2)
幾個注意:
- py支持多繼承
- 子類繼承的父類只能初始化一次榔至,如果父類1和父類2有共同的父類或者祖先類,則類初始化的時候會失敗欺劳。
- 當父類具有相同方法時唧取,會調(diào)用最先繼承的父類中的方法,如果要指定父類划提,則需要重寫此方法枫弟,并通過父類名.方法名來調(diào)用指定父類方法。
class Parent:
def eat(self):
print('父吃')
class Child(Parent):
def say(self):
print('孩說')
class Child1(Child):
def say(self):
print('重寫方法')
#繼承的基類只能出現(xiàn)一次鹏往,因為Child1繼承了Child淡诗,所以Child類
#等于出現(xiàn)了兩次,所以在類進行初始化時會發(fā)生錯誤伊履,
#class Child2(Child,Child1):
# def fun(self):
# print()
class Parent2():
def eat(self):
print('父類2')
#當繼承的兩個類有相同的方法時韩容,會優(yōu)先加載先繼承的類的方法
#如果要指定采用哪個父類的方法,則需要重寫,并且將父類函數(shù)
#需要的參數(shù)傳進去
class Child3(Parent,Parent2):
def eat(self):
Parent2.eat(self)
def fun(self):
print('無')
child=Child()
#子類調(diào)用父類方法
child.eat()
#子類自定義方法
child.say()
child1=Child1()
#子類重寫父類方法
child1.say()
#子類調(diào)用祖父類方法
child1.eat()
child3=Child3()
child3.eat()
拓展:
- isinstance():判斷某個實例是否屬于某個類
此函數(shù)需要輸入兩個參數(shù)唐瀑,第一個為實例群凶,第二個為類。返回類型為布爾值
#用該實例與該類的父類進行比較介褥,返回的也是true
print(isinstance(child3,Parent))
- dir(實例/類) : 返回一個對象/類的所有屬性和方法
print(dir(child3))
print(dir(Child3))
- hasattr(類/實例座掘,'屬性'):是否存在此屬性值
- getattr(類/實例递惋,'屬性'):得到此屬性值
- setattr(類/實例,'屬性',更改值)
class Parent:
a=123
b='sgd'
def eat(self):
print('父吃')
parent=Parent()
#True 是否存在該屬性之
print(hasattr(parent,'a'))
#123 得到該實例的a的屬性值
print(getattr(parent,'a'))
#設(shè)置該對象的屬性值
setattr(parent,'b',123)
#123
print(getattr(parent,'b'))