3.0 面向物件程式設計oop
你以為的面向物件:就是你一遍看著你物件,一遍敲程式碼。
真的面向物件:定義一個模型或者說一類人。假設是機器人女友。
首先:
第一步:你可以先定義一個模型。基礎的機器人,類人型的都有四肢五臟六腑。
然後填入功能:第一代女友:只會洗衣服做飯。是不是太無聊了。
升級下繼承上一代的功能:第二代:除了洗衣做飯還能扯淡打遊戲。
然後呢你朋友感覺你機器人女友不錯哦。你不可能把你辛辛苦苦的升級版女朋友給他吧?
你就把你定義的機器人模型給了他。他可以自己為所欲為的定義功能想創造多少個真的都行【把模型例項化】。
解釋兩個概念:
類和物件:
物件是面向物件程式設計的核心,在使用物件的過程中,為了將具有共同特徵和行為的一組物件抽象定義,提出了另外一個新的概念——類
類就相當於製造機器人女友的時候圖紙,用它來進行建立的真正的女朋友就相當於物件。【夠直白了吧】
認真了哈。
1,類的構成:
類(Class) 由3個部分構成
- 類的名稱:類名
- 類的屬性:一組資料
- 類的方法:允許對進行操作的方法 (行為)
<1> 舉例:
1)人類設計,只關心3樣東西:
- 事物名稱(類名):人(Person)
- 屬性:身高(height)、年齡(age)
- 方法(行為/功能):跑(run)、打架(fight)
2)狗類的設計
- 類名:狗(Dog)
- 屬性:品種 、毛色、性別、名字、 腿兒的數量
- 方法(行為/功能):叫 、跑、咬人、吃、搖尾巴
2,定義類:機器人女朋友
class GirlFriend():
#方法函式
def wash(self):
print("我在洗衣服。")
def cook(self):
print("做飯中")
- 定義類時有2種:新式類和經典類,上面的Car為經典類,如果是GirlFriend(object)則為新式類
- 類名 的命名規則按照"大駝峰"
3,有了類了現在是不是開始讓她成真了。
例項化方法:
物件名 = 類名()
first =GirlFriend()
上面就創造了第一代女朋友。
讓她洗衣服:first.wash()。使用" . "點呼叫方法。
給她新增身高和體重的屬性:
第一種:
first.weight="50kg"
first.height ="170cm"
第二種:使用__init__方法:【推薦】
初始化類:預設執行,自動呼叫。
def 類名:
#初始化函式,用來完成一些預設的設定
def __init__(self):
pass
__init__()
方法,在建立一個物件時預設被呼叫,不需要手動呼叫__init__(self)
中,預設有1個引數名字為self,如果在建立物件時傳遞了2個實參,那麼__init__(self)
中出了self作為第一個形參外還需要2個形參,例如__init__(self,x,y)
__init__(self)
中的self引數,不需要開發者傳遞,python直譯器會自動把當前的物件引用傳遞進去
魔法方法:__str()__列印方法
def __str__(self):
msg = "嘿。。。我的顏色是" + self.color + "我有" + int(self.wheelNum) + "個輪胎..."
return msg
- 在python中方法名如果是
__xxxx__()
的,那麼就有特殊的功能,因此叫做“魔法”方法 - 當使用print輸出物件的時候,只要自己定義了
__str__(self)
方法,那麼就會列印從在這個方法中return的資料
__del__物件被刪除方法:
def __del__(self):
print("__del__方法被呼叫")
print("%s物件馬上被幹掉了..."%self.__name)
修改物件的資料:
第一種就是剛剛給體重和身高的時候操作一樣。用物件名,賦值。
第二種在類中定義修改資料的方法,通過外界呼叫這個類的方法修改。【推薦】
物件的繼承功能。剛剛講了,第二代可以繼承第一代的功能,而且還有額外的功能。定義第二個的時候吧要繼承的那個寫在類物件名稱後面的括號裡即可,可以理解為把要繼承的吃掉了【下一代吧上一代幹掉了,子類繼承了父類】。繼承後父類的方法和屬性都會在子類中。
#第一代的
class GirlFriend(object):
#方法函式
def wash(self):
print("我在洗衣服。")
def cook(self):
print("做飯中")
#第二代的
class ErFriend(GirlFriend):
#方法函式
def cedan(self):
print("扯淡。")
def game(self):
print("遊戲")
寫得有點亂