標籤:建立 沒有 end eve 多繼承 fan 通用 proc handler
一、封裝
#物件導向:封裝
class Person:
def __init__(self,name,age):
"""
建構函式,類被調用的時候自動被執行。可以用來封裝各種通用的參數等.
self:調用方法的調用者的對象是誰就是誰
"""
self.name = name
self.age = age
self.gender = "man"
def show(self):
print("He is %s ,age: %s" %(self.name,self.age))
p1=Person("xiaofan",20)
p1.show()
二、繼承
#物件導向:繼承
class F: #父類,基類
def f1(self):
print(‘F.f1 . self: %s‘ %self) # 調用父類要給他傳self ,要麼自動傳,要麼手動傳
def f2(self):
print(‘F.f2‘)
class S(F): # 子類 ,衍生類別 ,繼承自 F 。 先在自己的類中找,沒有再去父類中找
def s1(self):
print(‘S.s1‘)
def f2(self): #重寫
pass
def f3(self):
super(S,self).f2()
#方法1:執行父類中的f2方法 。 super(子類名,調用者self)
F.f2(self)
# 方法2:執行父類中的f2方法 。執行對象self自動建立,執行分類方法要自己給他傳self
print(‘S.f3‘)
a = S()
a.s1()
a.f1() # 執行父類方法
a.f2()
a.f3()
# python多繼承:
# 當父類中有相同的方法時,繼承順序優先順序從左至右,找到則停止
# 繼承關係: a -> b -> c , a -> d
# 繼承順序: 從左(左邊的所有)-->右
# 繼承關係:a -> b -> c -> z , a -> d -> e -> z
# 繼承順序:從左(最上面的z,不找)-->右 --> 最後才找z
#多繼承:
class BaseReuqest:
def __init__(self):
print(‘BaseReuqest.init‘)
class RequestHandler(BaseReuqest):
def __init__(self):
print(‘RequestHandler.init‘)
BaseReuqest.__init__(self)
def serve_forever(self):
print(‘RequestHandler.serve_forever‘)
self.process_request()
#此處會調用哪個process_request()呢
# self,是obj , obj== 調用者 。 那麼肯定是執行Minx中的process_request()的
# 注意看 self 是哪個類的對象,然後回到那裡去找
def process_request(self):
print(‘RequestHandler.process_request‘)
class Minx:
def process_request(self):
print(‘minx.process_request‘)
class Son(Minx, RequestHandler):
pass
obj=Son()
# 執行個體化Son的對象,Son()繼承Minx,和RequestHandler。
# 執行 RequestHandler的初始化方法
obj.serve_forever()
# 執行RequestHandler父類BaseReuqest的初始化方法
# 執行RequestHandler的server_forever()
# 執行 Minx的process_request() 方法
三、多態
#多態:傳入的參數不同類型執行的方法不一樣
#在python中不需要考慮多態,python原生就是多態的
python物件導向