程式設計師都喜歡物件導向程式設計,但如果你沒有物件怎麼辦?當然是new乙個物件出來。
物件導向程式設計是一種程式設計思想,而不是真正的面向你的物件去程式設計。如果你真的這麼做了,恭喜你獲得:你愛我還是愛電腦?的靈魂拷問。
我們上一節將我們常用的**,封裝成了乙個函式。方便我們可以在任何想要使用它的地方,只需要簡單呼叫,就能實現複雜的功能。物件導向程式設計則是對一系列函式和變數的再次封裝,它將一系列具有相似功能的函式或變數(這裡應該叫做屬性)封裝成乙個類,再通過類來new出來乙個實體(即物件)。
類與我們傳統意義上的種類相似。某一類的物體具有一系列相似的屬性,我們稱之為類。而物件則是某乙個類的具體實體(沒有類就沒有物件)。比如說:
這裡女生的擇偶標準是乙個抽象的概念,但有具體的屬性:高、富、帥、愛我。這些標準抽象出來的乙個不存在的物件就是類。而男生恰好符合女生的擇偶標準,即這些屬性都占有,那麼男生就是通過女生的抽象的擇偶標準new出來的乙個物件。我們來講它轉換為程式語言:
# 固定搭配class 類名(object):
class boyfriend(object):
# __init__ 初始化函式,固定搭配,self必須寫
# self後面跟著的是需要傳入的引數
def __init__(self, tall, rich, handsome, love):
# 身高沒有180,就不是高
if(tall >= 180):
# self.***表示這個類的屬性是***
self.istall = true
else:
self.istall = false
# 年薪不過百萬,就不算富
if(rich >= 100):
self.isrich = true
else:
self.isrich = false
# 主觀判斷true或false
self.handsome = handsome
# 愛我嗎?true或false
self.love = love
# 屬於這個類的方法(函式),引數必須傳入乙個self
def saylove(self):
# self.love 表示呼叫這個物件的屬性love
if (self.love == true):
print('i love you')
else:
print('sorry')
# new乙個物件出來
bf = boyfriend(200, 200, true, true)
bf.saylove()
self雖然作為init()和saylove()的引數,在我們呼叫的時候,並沒有傳遞這個引數。因為self表示物件自身,呼叫無需傳遞(吐槽一下,其他程式語言在定義函式的時候也不用寫這個self,python多這麼乙個反而容易讓初學者誤解)。
我們再來貼一段屬於程式設計師的浪漫**(最近想要表白的小夥伴們準備劃重點了)。
class boy(object):
def __init__(self, name):
self.name = name
# 愛你
def love(self, girl):
print('i love you, '+str(girl.name))
# 想你
def miss(self, girl):
print('i miss you, '+str(girl.name))
# 寵你
def takecareof(self, girl):
print('i will take care of you and our love, '+str(girl.name))
# 等你
def waitfor(self, girl):
print('i'm waiting for your love, '+str(girl.name))
# 娶你
def marry(self, girl):
print('i love you too.')
print('i'm going to marry you, '+str(girl.name))
# 珍惜你
class girl(object):
def __init__(self, name):
self.name = name
self.hesitatecount = 0
# 做你女朋友
def accepted(self):
print('ok')
# 慢慢愛上你
def thinkover(self):
print('please give more time')
self.hesitatecount = self.hesitatecount + 1
if self.hesitatecount >= 10:
return false
else:
return true
return true
# 愛你
def love(self, boy):
if self.hesitatecount >= 10:
print('i love you, '+str(boy.name))
else:
print('sorry, '+str(boy.name))
# **是我抄的,愛你是真心的
i = boy("mr.liu")
u = girl("my lady")
# 未來的那一天,我對你說:我愛你
i.love(u)
# 那是我人生中最開心的一天,因為你答應做我女朋友
u.accepted()
# 從哪天起,腦海中慢慢都是你
i.miss(u)
# 我會用心去呵護你,呵護來之不易的愛情
i.takecareof(u)
# 我知道你並沒有對我動心,或許只是在嘗試
# 但我願意等,願意等你愛上我的那一天
ishesitate = true
while ishesitate:
i.waitfor(u);
ishesitate = u.thinkover();
u.love(i)
# 我已經準備好與你共度一生
# 因為你是我的一生摯愛
i.marry(u);
self.變數名表示呼叫這個物件的變數,self.函式名()表示呼叫這個物件的函式。物件中的變數,我們稱之為屬性,即這個物件有什麼;物件中的函式,我們稱之為方法,即這個物件能幹什麼。
上面的while表示迴圈的意思,直到 while 後面ishesitate為false,才停止執行,否則,將一直執行下去。還記得上節課將圓錐表面積與體積封裝成函式的作業嘛?今天我們來將它封裝成物件吧。
import math像這樣,我們就封裝好了乙個圓錐的類。通過這個類,我們可以製造出來各種不同型號的圓錐(不同半徑和高度),同時也可以很方便的得到它們的體積和表面積。# 類的名字一般首字母大寫
class cone(object):
def __init__(self, radius, height):
self.radius = radius
self.height = height
# 圓錐母線
self.line = math.sqrt((radius**2)+(height**2))
# 表面積
def area(self):
# 側面積
lateral_area = math.pi * self.radius * self.line
# 底面積
floor_area = math.pi * (self.radius ** 2)
s = lateral_area + floor_area
return s
# 體積
def volume(self):
v = (1/3) * (math.pi * (self.radius ** 2) * self.height)
return v
# 建立乙個半徑為3,高為2的圓錐實體(物件)
cone = cone(3, 2)
s = cone.area()
v = cone.volume()
print('this cone's area is:'+str(s))
print('this cone's volume is:'+str(v))
沒有物件的朋友們,快new乙個物件吧。這樣你就能物件導向程式設計了,多麼幸福。但沒車沒房怎麼辦?小問題,留給大家乙個作業,給自己new一輛車吧。
人類大腦最強大的地方在於可以對事物進行很好的抽象,抽象後歸納總結出經驗來。物件導向程式設計依照我們的抽象出來的類來構建乙個個具有特定屬性的物件,來簡化繁雜的程式,同時也使**更加簡潔清晰。
未完待續
換個視角學python,開開心心寫程式。
程式設計師的浪漫
在人們的印象中,程式設計師的世界裡不是1就是0 在我們看來程式設計師大多都是死板的,沒有幽默感,也不會哄女孩子的,但是其實程式設計師也有屬於他們的浪漫,以下程式就是乙個程式漢子,為心愛的女神寫的乙份浪漫情書,希望女神妹妹能夠感動.if you love me you love me love lov...
程式設計師的浪漫
我和我女朋友已經談了快三年戀愛了,也吵過架但大多都是快樂的時刻,每次惹她生了氣都會道歉,然後承諾她乙個驚喜。這就是我所說的浪漫的由來!大學主要學的是j2ee的後台,對前端不是很擅長,但乙個偶然的機會發現了乙個叫hacker zhou的人寫的乙個紀念日的網頁,大為震撼。也就有了後來我自己的小 在這裡謝...
程式設計師的浪漫
love c語言 include include include加粗樣式 hwnd getconsolehwnd void void drawxy void draw double p void main 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdow...