①面向過程:
重過程:解決問題,考慮的是解決問題的流程
解決問題的思路清晰,但拓展性不強
②物件導向:
重物件:解決問題,找到解決問題的物件
解決問題的思路可能不止一條(理解解決問題的難度增加),但拓展性強
python用面向過程和物件導向兩種方式解決問題
函式與方法:都是解決問題的功能
函式:通過函式名直接呼叫
方法:通過附屬者.語法來呼叫
變數:通過變數名訪問變數值
屬性:通過附屬者.語法來訪問變數值
函式要手動傳self,方法不用傳
如果是乙個函式,用類名去呼叫,如果是乙個方法,用物件去呼叫
#判斷是方法還是函式
from types import
functiontype, methodtype
class
foo(object):
def__init__
(self):
self.name = "
jerry
"def
func(self):
(self.name)
obj =foo()
print(isinstance(obj.func, methodtype)) #
true 說明這是乙個方法
print(isinstance(foo.func, functiontype)) #
true 說明這是乙個函式。
內建 | 全域性 |區域性deffunc():
a = 10
print(locals()) #
func()
print(func.__dict__) #
{}a = 10
print(a.__dict__) #
會報錯ls = [1, 2]
print(ls.__dict__) #
會報錯
檔案 | 函式 | 類
所有能產生命名空間對應的物件(存放位址的變數)有__dict__這個值, 通過這個值訪問到名字與位址的對應關係,__dict__指向的就是附屬物件的命名空間
deffunc():
pass
func.
__dict__['
index
'] = 100
print(func.__dict__) #
print(func.__dict__['
index
']) #
100print(func.index) #
100func.add = lambda x, y: x +y
print(func.__dict__
)print(func.add(100, 200)) #
300
deffn():
pass
print(fn.__dict__) #
{}fn.name = '
fn函式
'print(fn.name) #
fn函式
deftest():
print('
可以成為fn功能的函式')
fn.action =test
fn.action()
#可以成為fn功能的函式
尋求乙個類似函式與檔案物件,可以額外新增功能與屬性的物件
①類:具有相同特徵與行為個體集合的抽象
②物件:有特徵、行為的具體個體,就是類的具體體現
類和物件都擁有自己獨立的命名空間,類的物件也擁有自己的命名空間,所以類和物件都可以通過.語法新增或使用屬性(變數)和方法(函式)
重點:類一旦被載入(隨著所屬檔案的載入就載入),就會進入類的內部執行類中的所有**
①類的宣告:class 類名: #
class定義 類 語法的關鍵字
pass
②物件的產生:物件的例項化
物件1 =類名()
物件2 =類名()
物件3 =類名()
③學習重點:自定義類的例項化物件
class
student:
pass
stu =student()
print(id(student)) #
6732072
print(id(stu)) #
32076744
print(student.__dict__
)print(stu.__dict__
)stu.
__dict__['
name
'] = '
bob'
print(stu.name) #
bobdef
fn():
print('學習'
)stu.study =fn
stu.study() #學習
④例子:
#例項化乙個egon同學,有學習功能
#例項化乙個liu某同學,有學習功能
class
student:
pass
deffn():
print('學習'
)s1 =student()
s2 =student()
#print(id(s1), id(s2), id(student)) # 35616304 35617424 5749032
s1.name = '
egon
's1.study =fn
s2.name = '
liu某
's2.study =fn
print(s1.__dict__) #
print(s2.__dict__) #
print(s1.name) #
egon
print(s2.name) #
liu某
classpeople:
identify = '人類'
defsleep(self):
print('睡覺'
)
print(456)
print(people.__dict__
)p1 =people()
p2 =people()
#p1,p2雖然能訪問identify,但identify屬於people類,只有乙份
print(p1.identify) #
人類print(p2.identify) #人類#
p1修改的並不是people的identify,相對於給自己新增乙個identify屬性
p1.identify = '
新人類'
print(p1.identify) #
新人類 # 訪問自己的
print(p1.__dict__) #
p1.__dict__.clear() #
刪除自己後
print(p1.__dict__, p1.identify) #
{} 人類 # 訪問類的
#p2自己沒有,還是訪問類的
print(p2.__dict__, p2.identify) #
{} 人類
物件導向 初識物件導向
面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.面向過程適合處理一些較為簡單的問題 物件導向思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要分哪些類,然後對這些類進行單獨思考,最後才是對某個分類下的細節進行面向過程的思索 物件導向適合處理複雜的問題,適合處理需要多人協作的問題 對於...
初識物件導向
1.例項化 2.init 方法 3.類方法和靜態方法 4.訪問控制 5.屬性裝飾器 在python中,用變數表示特徵,用函式表示技能,因而具有相同特徵和技能的一類事物就是 類 物件是則是這一類事物中具體的乙個.三要素類 class 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所...
初識物件導向
開始接觸物件導向程式設計,學習時間不長,寫下點自己目前的理解,總結梳理下最近的學習成果。一切皆是物件,物件導向體系中有這麼一句經典的話。我認為可以這麼理解,物件導向程式設計的關鍵步驟是如何將我們所希望實現的功能抽象為計算機可實現的模型,這些模型我們可以稱之為物件。當我們把具有相同特點的多個物件進一步...