系列
序:對Python一無所知的作者竟然開了這個系列…長話短說,學Python的第二天,既然是面向對象的語言,那就面向對象吧!…Emmm…對象在哪?
P.s:學藝不精,請大佬們多多點撥:)
對象
作爲一門面向對象的語言,那就必須來學一下怎麼找個對象!…怎麼來寫一個對象。
class Coach:
CoachName = "教練" #公共變量
__weight = 100 #開頭兩個下滑線代表私有 變量與方法都可以加兩個下滑線來表示私有
def __init__(self,name:str): #構造函數,self不是關鍵字,可以是其他任何命名
self.CoachName = name # 賦值操作,操作的都是實例而不是類,所以要用self.
def speak(self): # def 是聲明函數的關鍵字
print("%s:小夥子,你有對象嗎?"%self.__class__.CoachName) # 使用類本身的變量,不是實例
def agree(self):
print("%s:行吧行吧,找不到對象至少你能創建一個了吧"%self.CoachName)
class LiuChuanFeng(Coach): # 繼承
Name = "流川楓"
def __init__(self): #繼承後構造函數中需要對父級進行初始化(如果父級有需要的情況)
Coach.__init__(self,"教練")
def speak(self): #父級方法的重寫
print("%s:八嘎"%self.Name)
def agree(self):
print("%s:Zzz...."%self.Name)
def coachAgree(self):
super(LiuChuanFeng, self).agree() #子類調用父級被重寫的方法
class Adream:
state = "這是一個夢"
class YingMuHuaDao(Coach,Adream): #多重繼承
def __init__(self):
Coach.__init__(self,"教練")
def dreaming(self):
print("%s(%s):哈哈哈,你倆都被我繼承了!"%(Name,Adream.state))
# 運行時從這裏開始
coach = Coach("胖子") #創建對象實例
liuChuanFeng = LiuChuanFeng()
Name = "櫻木花道"
print("%s:%s你是哪個?"%(Name,coach.CoachName))
coach.speak()
print("%s:你爲啥這麼高級的speak,我就會Print"%Name)
liuChuanFeng.speak()
print("%s:教練,我想學Python!"%Name)
liuChuanFeng.agree()
liuChuanFeng.coachAgree()
me = YingMuHuaDao()
me.dreaming()
總結
Python3的面向對象非常的簡單,而且取別於C#它可以實現多繼承。
容易混淆的地方在於self的使用,在類裏面,方法中所有的賦值操作一般都是針對於實例來言的,所以一定要使用self.Name = XXX
這樣來賦值,而不是Name = XXX
,這個初學者很容易錯(別問我怎麼知道的)
繼承會繼承方法與屬性,若執行了父級的方法存在對屬性的改變,則其實是在改變子級對象中的屬性值
class Coach():
Name = "教練"
def __init__(self,name:str):
self.Name = name
class LiuChuanFeng(Coach):
Name = "流川楓"
def __init__(self):
# 在Coach的初始化方法中對Name進行了賦值,這裏的self其實是LiuChuanFeng的實例
Coach.__init__(self,"教練")
print(self.Name) # 輸出爲 教練
.
.
.
.
.
嗨,我是作者Vin129,逐兒時之夢正在遊戲製作的技術海洋中漂泊。知道的越多,不知道的也越多。希望我的文章對你有所幫助:)