生活随笔
收集整理的這篇文章主要介紹了
Python面向对象编程(二)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第17,18個(gè):面向?qū)ο笕筇匦灾鄳B(tài)
?? ?
1 def func(arg):
2 print(arg)
3
4 #python支持多種形態(tài)(類型)
5 #優(yōu)點(diǎn):不需要先聲明是什么字符,數(shù)字類型
6 #缺點(diǎn):看查源碼的時(shí)候不知道是什么類型
7 func(
1)
8 func(
"hk")
9 func([
11,
22,
33,
44])
第19,20,21個(gè):類成員之靜態(tài)字段和普通字段
?? ?
1 class foo:
2 #字段(靜態(tài)字段)屬于類
3 cc =
123
4 def __init__(self):
5 #字段(普通字段)屬于對(duì)象
6 self.name =
'la'
7
8 def show(self):
9 print(self.name)
10
11 obj = foo()
字段位置及訪問規(guī)則范例:
1 class province:
2 country =
"中國" #靜態(tài)字段存在類里,在代碼加載時(shí)已創(chuàng)建
3 def __init__(self,name):
4 self.name =
name #普通字段存在于對(duì)象里,對(duì)象創(chuàng)建后調(diào)用時(shí)存在于內(nèi)存中
5 #如果country字段存在對(duì)象中被反復(fù)調(diào)用會(huì)占用大量的內(nèi)存資源
6 #省的屬性是中國
7 hn = province(
'河南')
8 hb = province(
'河北')
9 sd = province(
'山東')
10 print(hn.name) #打印河南的名字
11
12
13 # 一般情況:自己訪問自己的字段,即類訪問靜態(tài)字段、對(duì)象訪問普通字段
14 #字段訪問規(guī)則:
15 # 普通字段只能用對(duì)象訪問
16 # 靜態(tài)字段用類訪問(萬不得已才可使用對(duì)象訪問)
17 print(hn.name)
18 print(province.country)
19 #print(hn.country)
第22,23個(gè):類成員之普通方法和靜態(tài)方法以及類
?? ?
方法:
?? ?所有的方法屬于類
?? ?1、普通方法:至少一個(gè)self,對(duì)象執(zhí)行
?? ?2、靜態(tài)方法:任意參數(shù), 類執(zhí)行(萬不得已才可使用對(duì)象訪問)
?? ?3、類方法:至少有一個(gè)cls,類執(zhí)行(萬不得已才可使用對(duì)象訪問)
?? ?
1 class province:
2 country =
"中國"
3 def __init__(self,name):
4 self.name =
name
5
6 #普通方法,由對(duì)象去調(diào)用執(zhí)行(方法屬于類)
7 def show(self):
8 print(self.name)
9 return True
10
11 #靜態(tài)方法屬于類,由類來調(diào)用執(zhí)行。可以沒有參數(shù)也可以有多個(gè)參數(shù)
12 @staticmethod
13 def f1(arg1,arg2):
14 print(arg1,arg2)
15
16 #類方法由類來調(diào)用,是靜態(tài)方法的一種特殊形式,至少有一個(gè)參數(shù)cls
17 @classmethod
18 def f2(cls):
19 print(cls)
20
21 hn = province(
'河南') #創(chuàng)建對(duì)象
22 print(hn.show()) #對(duì)象調(diào)用普通方法
23
24 province.f1(
12,
34) #類調(diào)用靜態(tài)方法
25 province.f2() #類調(diào)用類方法,打印出類的名稱
第24,25,26個(gè):類成員之屬性
?
屬性:
具有方法的寫作形式,具有字段的訪問形式
具體方法里做什么都是自己定義的
1 '''
2 class pager:
3 def __init__(self,all_count):
4 self.all_count =
all_count
5
6 def all_pager(self):
7 a1,a2=divmod(self.all_count,
10)
8 if a2 ==
0 :
9 return a1
10 else:
11 return a1 +
1
12 p = pager(
101)
13 print(p.all_pager())
14 '''
15 class pager:
16 def __init__(self,all_count):
17 self.all_count =
all_count
18
19 @property #表示添加了屬性,調(diào)用的時(shí)候就不用加括號(hào)
20 def all_pager(self):
21 a1,a2=divmod(self.all_count,
10)
22 if a2 ==
0 :
23 return a1
24 else:
25 return a1 +
1
26 p = pager(
101)
27 print(p.all_pager) #調(diào)用all_pager方法取值的時(shí)候不用加括號(hào)
-----------------------------------------
屬性即可以 獲取 又可以 設(shè)置 還可以 刪除!
第一種形式(比較少見):
1 class pager:
2 def __init__(self,all_count):
3 self.all_count =
all_count
4
5 @property #表示添加了屬性,調(diào)用的時(shí)候就不用加括號(hào)
6 def all_pager(self):
7 a1,a2=divmod(self.all_count,
10)
8 if a2 ==
0 :
9 return a1
10 else:
11 return a1 +
1
12
13 @all_pager.setter
14 def all_pager(self,value):
15 print(value)
16
17 @all_pager.deleter
18 def all_pager(self):
19 print(
123)
20
21 p = pager(
100) #100是和__init__方法里的all_count一致的
22 print(p.all_pager) #獲取
23 p.all_pager=
111 #設(shè)置
24 del p.all_pager #刪除
?
第二種形式(比較常見):
1 class pager:
2 def __init__(self,all_count):
3 self.all_count =
all_count
4
5 def f1(self):
6 return 123
7 def f2(self,value):
8 print(value)
9 def f3(self):
10 print(
1234)
11
12 foo = property(fget=f1,fset=f2,fdel=
f3)
13
14 p = pager(
100)
15 print(p.foo) #對(duì)應(yīng)著fget=
f1
16 p.foo =
"han" #對(duì)應(yīng)著fget=
f2
17 del p.foo #對(duì)應(yīng)著fget=f3
?
第27個(gè):類成員之成員修飾符
成員:字段、方法、屬性
兩種修飾符:一種私有(只能在類內(nèi)部訪問)
一種公有
公有修飾符:
1 class foo:
2 def __init__(self,name):
3 self.name =
name
4
5 def f1(self):
6 print(self.name)
7
8 p = foo(
"hk")
9 #共有的兩種形式:
10 #print(p.name) #1在類的外部直接調(diào)用
11 print(p.f1()) #2在類的外部通過方法間接的調(diào)用
私有修飾符:
1 class foo:
2 def __init__(self,name):
3 self.__name =
name #創(chuàng)建一個(gè)私有的字段
4
5 def f1(self):
6 print(self.__name) #私有的字段
7
8 p = foo(
"hk")
9 print(p.f1()) #私有的字段只能在類的內(nèi)部調(diào)用,通過f1方法調(diào)用
# print(p._foo__name) #私有的成員修飾符也可以訪問,不到萬不得已不用!!!
存在類的繼承,父類的私有子類是無法獲取的。
1 class foo:
2 def __init__(self,name):
3 self.__name =
name #創(chuàng)建一個(gè)私有的字段
4
5 def f1(self):
6 print(self.__name) #私有的字段
7
8 class bar(foo):
9 def f2(self):
10 print(self.__name)
11
12 obj = bar(
"han")
13 obj.f2() #存在類的繼承,私有的成員修飾符也是不可以的。
?
1 class foo:
2 __cc =
123 #靜態(tài)字段
3 def __init__(self,name):
4 self.name =
name
5 def f1(self):
6 print(self.name)
7 return 135
8 def f2(self):
9 print(foo.__cc) #類名 . 靜態(tài)字段
10 '''
11 @staticmethod #靜態(tài)方法
12 def f3():
13 print(foo.__cc)
14 foo.f3()
15 '''
16 obj = foo(
'han')
17 print(obj.f2()) #對(duì)象執(zhí)行f2的方法,私有的成員修飾符在類中可以找到并執(zhí)行
?
轉(zhuǎn)載于:https://www.cnblogs.com/hanxiaobei/p/5751414.html
總結(jié)
以上是生活随笔為你收集整理的Python面向对象编程(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。