1. 程式人生 > >python 【面向對象程序設計】

python 【面向對象程序設計】

property under 比較 per turn tex car text types

?類的所有實例方法都至少有一個self參數,且 self 必須是方法的第一個參數(如果有多個參數的話),self 代表將來要創建的對象本身。

■在Python,將實例方法的第一個參數定義為 self 只是一個習慣。實際上,不是一定要用 self 來表示將來創建的對象,可以自己取定。

1 class Dog:
2     def __init__(nself,name):
3         nself.name=name;
4     def info(self):
5         print(self.name)
6 
7 d=Dog("大黃")
8 d.info()




?類的屬性有兩類:實例屬性、類屬性。實例屬性(也稱:靜態屬性)是在構造方法__init__中定義的,因為實例屬性是在對象創建時才會分配空間,所以定義和類內使用都要以self或類名為前綴,類外使用以對象名為前綴。類屬性(也稱:對象屬性)是定義在所有方法之外的,類內使用以self或類名為前綴,類外使用以對象名或類名為前綴。

■在Python中比較特殊的是,可以在類和對象都創建完成後,動態向類中增加新的屬性和方法,俗稱混入(mixin)機制。 這就是Python的動態性如何增加呢?增加新的屬性:對象名 . 新屬性=value。增加新方法:import types 對象名 . 新方法名 = types . MethodType(新方法名,對象名)

car1 = Car("Red")     #實例化對象
car2 = Car("Blue")
print(car1.color, Car.price)    #查看實例屬性和類屬性的值
Car.price = 110000       #修改類屬性
Car.name = ‘QQ‘       #動態增加類屬性
car1.color = "Yellow"      #修改實例屬性
print(car2.color, Car.price, Car.name)
print(car1.color, Car.price, Car.name)

?靜態方法

① 用@staticmeth

od修飾器修飾
②=“ 定義在類中的全局函數
③可以無參數,若有參數,不會將第一個參數看做調用對象。
④調用方式為:a.)類名.靜態方法名 b.) 對象名.靜態方法名

類方法
①用@classmethod裝飾器修飾,第一個參數cls是當前類。
②調用方式為:a.)類名.靜態方法名 b.) 對象名.靜態方法名

?定義時,有“__”前綴的成員是私有成員。在類內以“self.__”的形式調用,類外則無法直接訪問,但可以通過[1]公有成員方法和[2]Python特殊方式間接訪問。

E: [1] def info(self,value) [2] 對象名 . _類名__私有成員

return self.__value a._A__value

而定義時,無下劃線前綴的成員是公有成員。在類內以“self.__”的形式調用,類外以“對象名 . 成員名”的形式訪問。

?私有方法公有方法的定義與相應成員的定義相似。

■在Python中,以下劃線開頭的變量名和方法名有特殊的含義,尤其是在類的定義中。用下劃線作為變量名和方法名前綴和後綴來表示類的特殊成員:
_xxx:受保護成員,不能用‘from module import *‘導入;
__xxx__:系統定義的特殊成員; 定制類???
__xxx:私有成員

?@property,property意思是“屬性”,功能是代替set、get方法。

E:

 1 class B:
 2     def __init__(self,atr):
 3         self.__atr=atr
 4 
 5     @property    #代替getAtr方法
 6     def atr(self):
 7         print("property輸出裝飾器被調用")
 8         return self.__atr
 9 
10     @atr.setter    #代替setAtr方法
11     def atr(self,newAtr):
12         self.__atr=newAtr
13 
14 if __name__=="__main__":
15     b=B("20")
16     
17     print(b.atr)
18     """ atr為私有屬性,無法在類外直接訪問,但第15行語句能執行
19 通過輸出語句“property輸出裝飾器被調用”可知是property的作用效果
20 """
21     b.atr=30
22     print(b.atr)
23     print(b._B__atr)

python 【面向對象程序設計】