#繼承:乙個類繼承另乙個類,就可以使用另乙個類裡的方法
eg
class
father1
:def
hello
(self)
:print
('hello'
)class
father
(object):
#object->father->son
def__init__
(self,name)
:#父類的屬性高於兩個子類
self.name=name
defeat(self)
:print
('大吃一頓'
)class
son1
(father,father1)
:#繼承father類,可同時繼承多個父類
name=
'小黑'
class
son2
(father)
:#繼承中,訪問的順序逐層son->father->object
name=
'小白'
son1=son1(
'小白'
)son2=son2(
'小黑'
)print
(son1.name)
son1.eat(
)son1.hello(
)print
(father.__bases__)
#__bases__查詢其父類名
print
(son2.name)
son2.eat(
)
#如果繼承多個父類 父類中有同種方法 會優先繼承最左變得類
#繼承優先順序 由左到右
class
father
:def
__init__
(self,name)
: self.name=name
defeat(self)
:print
("大吃一頓"
)class
mother
:def
__init__
(self,age,***)
: self.age=age
self.***=***
defcook
(self)
:print
('炒菜好吃%s'
%self.age)
class
son(father,mother)
:pass
xiaohong=son(
'name'
)#此時引數不會傳入mother中
print
(xiaohong.name)
xiaohong.eat(
)xiaohong.age=
'age'
#可使用此方法向mother傳參
print
(xiaohong.age)
xiaohong.cook(
)
class
base
:def
play
(self)
:print
('this is base'
)class
a(base)
:def
play
(self)
:print
('this is a'
)super()
.play(
)#呼叫b,
class
b(base)
:def
play
(self)
:print
('this is b'
)class
son(a,b)
:def
play
(self)
:print
('this is son'
) base(
).play(
)#可用於呼叫父類
super()
.play(
)#super.方法()呼叫父類的方法 遵循mro規則
#mro 演算法解析順序 繼承的順序,
s=son(
)#例項化son,mro規則順序為:a->b-base->object
s.play(
)print
(son.__mro__)
#通過此語句可以檢視mro順序a()
.play(
)#在使用類裡方法的時候 有兩種形式
#1,例項化乙個物件 通過物件.方法()
#2,類名().方法() #類名() 例項化
#不想使用父類方法,可在子類中重寫進行覆蓋
#多繼承 mix-in(搭積木)設計模式–>由分到總
#運算子方法參考+,__add__這種
classa:
def__init__
(self,num1,num2)
: self.num1=num1
self.num2=num2
def__add__
(self,other)
:#由+號呼叫
sum1=self.num1+other.num2
sum2=self.num2+other.num1
return sum1,sum2
print
(sum1)
a=a(10,
100)
b=a(11,
111)
print
(a+b)
print(1
+2)
#str 和 repr (必須返回字串)
#print 直接列印物件時,會顯示object和位址
#如果定義了repr,print列印時會列印這個魔法方法裡的內容
#如果定義了str就會列印str裡的內容
#str和repr同時出現,只會列印str裡的內容
class
person
:def
play
(self)
:print
('this is play'
)def
__str__
(self)
:return
'this is str'
def__repr__
(self)
:return
'this is repr'
x=person(
)x.play(
)# %s 佔位符 %r也是佔位符
# %s 會呼叫str %r會呼叫repr
print
('%s'
%x)#列印時預設為str
print
('%r'
%x)#互動時預設為repr
# __str__返回的結果 可讀性強 方便閱讀者
# __repr__返回的結果更精確 方便開發者
# __call__方法
class
person
:#例項變數加上括號就可以呼叫__call__
def__call__
(self)
:print
('this is call'
)h=person(
)h.age=
19h(
)print
(h.__class__)
#查詢類名
print
(h.__dict__)
#以字典形式輸出例項屬性
python學習筆記 繼承與重寫
繼承 定義乙個類 animal 動物 這個類中需要兩個方法 run sleep class animal def run self print 動物會跑 def sleep self print 動物睡覺 直接從animal類中來繼承它的屬性和方法 繼承是物件導向三大特性之一 通過繼承我們可以使乙個...
python學習筆記 繼承
如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷成為迭代。在python中,迭代是通過for.in來完成的。使用for迴圈時,只要作用於乙個可迭代物件,for迴圈就可以正常執行。在python中,一邊迴圈一邊計算的機制,稱為生成器 generator ...
php筆記 7 繼承
父類person,子類student class person protected function show 關鍵字extents後跟繼承的父級類名 class student extends person 重寫父類的show方法,訪問許可權不能低於原來的,父類是protected,現在用publ...