python函數的面向對象——面向對象設計
阿新 • • 發佈:2018-02-26
ret 編號 -s 類型 來講 代碼 family 問題 post
通過幾個函數式編號演進,理解面向對象設計
def01.py
1 dog1 = {
2 ‘name‘:‘元昊‘,
3 ‘gender‘:‘母‘,
4 ‘type‘:‘藏獒‘
5 }
6 dog2 = {
7 ‘name‘:‘李李‘,
8 ‘gender‘:‘公‘,
9 ‘type‘:‘臘腸‘
10 }
11
12 def jiao(dog):
13 print(‘一條狗[%s],汪汪‘%dog[‘name‘])
14
15 def yaoren(dog):
16 print(‘一條狗[%s]正在咬人‘%dog[‘ type‘])
17
18 jiao(dog1)
19 yaoren(dog1)
20 yaoren(dog2)
def02.py
6
7 def dog():
8 def jiao(dog):
9 print(‘一條狗[%s],汪汪‘%dog[‘name‘])
10
11 def yaoren(dog):
12 print(‘一條狗[%s]正在咬人‘%dog[‘type‘])
13
14 dog1 = {
15 ‘name‘: ‘元昊‘,
16 ‘gender‘: ‘母‘,
17 ‘ type‘: ‘藏獒‘,
18 ‘jiao‘:jiao,
19 ‘yaoren‘:yaoren
20 }
21 return dog1
22
23 d1 = dog()
24 d1[‘jiao‘](d1)
def03.py
6
7 def dog(name,gender,type):
8 def jiao(dog):
9 print(‘一條狗[%s],汪汪‘%dog[‘name‘])
10
11 def yaoren(dog):
12 print(‘一條狗[%s]正在咬人‘%dog[‘type ‘])
13
14 dog1 = {
15 ‘name‘: name,
16 ‘gender‘: gender,
17 ‘type‘: type,
18 ‘jiao‘:jiao,#內部函數
19 ‘yaoren‘:yaoren#內部函數
20 }
21 return dog1#因為作用域的問題,所以一定要用內部的return 返回jiao,yaoren的函數,才能被外部調用
22
23 d1 = dog(‘張明‘,‘母‘,‘臘腸‘)
24 d1[‘jiao‘](d1)#引入返回的那個數組d1 ,
def04.py
6
7 def dog(name,gender,type):
8 def jiao(dog):
9 print(‘一條狗[%s],汪汪‘%dog[‘name‘])
10
11 def yaoren(dog):
12 print(‘一條狗[%s]正在咬人‘%dog[‘type‘])
13
14 def init(name,gender,type):
15 dog1 = {
16 ‘name‘: name,
17 ‘gender‘: gender,
18 ‘type‘: type,
19 ‘jiao‘:jiao,#內部函數
20 ‘yaoren‘:yaoren#內部函數
21 }
22 return dog1
23
24 return init(name,gender,type)
25
26 d1 = dog(‘張明‘,‘母‘,‘臘腸‘)
26 print(d1[‘name‘],d1[‘gender‘])
27 d1[‘jiao‘](d1)#引入返回的那個數組d1 ,
# 那麽一個函數,
# 就是給定不同屬性,設置屬性到它內部,
# 並且它內部的函數使用了這些屬性,完成了新的動作,
# 通過返回方法至一個字典當中,讓外部調用這個方法(屬性和方法都需要讓外部去訪問,在字典類型當中來講,是平等的),
# 即完成了所謂的【面向對象】
# 對象在不描述之前什麽都不是。
# 對象就是需要描述它的動作和特征,才能去定義它。比如:人,長什麽樣,能做什麽;燈泡,是什麽樣,能做什麽。
# 類是抽象的,只有屬性和方法。 dog()函數就是
# 但對象是經過動作和特征的定義的。d1 定義後,就是一條狗了
# 這就是面向對象設計
類就像模板,定義後就是一個對象了。
由 類-----產生-----對象的過程叫做實例化(實例=對象)
在python當中,沒有要求你一定要寫面向對象的代碼。用面向對象的語言,和一個程序的設計是面對對象的,兩者無任何關系。
你寫的程序是不是面向對象的,和你用的語言是不是面向對象的無關系!面向對象設計,只不過是函數/過程式編程的演進。關鍵在於面向對象的設計思路。
python函數的面向對象——面向對象設計