標籤:第一部分 lse elf 地區 建立 執行 類的成員 property let
1.物件導向結構分析:----面相對象整體大致分為兩塊地區:--------第一部分:靜態欄位(靜態變數)部分--------第二部分:方法部分--每個大地區可以分為多個小部分:class A: cooname = ‘Jake‘ # 靜態變數(靜態欄位) __cooage = 20 # 私人靜態變數(私人靜態欄位) def __init__(self, name, age): # 普通方法(構造方法) self.name = name # 對象屬性(普通欄位) self.__age = age # 私人對象屬性(私人普通欄位) def func1(self): # 普通方法 pass def __func(self): # 私人方法 pass @property def prop(self): # 屬性 pass @classmethod # 類方法 def class_func(cls): ‘‘‘定義類方法,至少有一個cls參數‘‘‘ pass @staticmethod # 靜態方法 def stact_func(): ‘‘‘定義靜態方法,無預設參數‘‘‘ pass2.物件導向的私人與公有對於每一個類的成員而言都有兩種形式:----共有成員,在任何地方都可以訪問----私人成員,只有在類的內部才能訪問--------私人成員和共有成員的訪問限制不同:靜態欄位(靜態變數)--共有靜態欄位:類可以訪問,類內部可以訪問,衍生類別中可以訪問--私人靜態欄位:僅類內部可以訪問普通欄位(對象屬性)--共有普通欄位:對象可以訪問,類內部可以訪問,衍生類別中可以訪問--私人普通欄位:僅類內部可以存取方法:--共有方法:對象可以訪問,類內部可以訪問,衍生類別中可以訪問--私人方法:僅類內部可以訪問總結:對於這些私人成員來說,他們只能在類的內部使用,不能在類的外部以及衍生類別中使用.ps:非要訪問私人成員的話,可以通過 對象._類__屬性名稱,但是絕對不允許!!!為什麼可以通過._類__私人成員名訪問呢?因為類在建立時,如果遇到了私人成員(包括私人靜態欄位,私人普通欄位,私人方法)它會將其儲存在記憶體時自動在前面加上_類名.3.物件導向的成員1)欄位欄位包括:普通欄位和靜態欄位,他們在定義和使用中有所區別,而最本質的區別是記憶體中儲存的位置不同,--普通欄位屬於對象--靜態欄位屬於類
由:靜態欄位在記憶體中只儲存一份普通欄位在每個對象中都要儲存一份應用情境: 通過類建立對象時,如果每個對象都具有相同的欄位,那麼就使用靜態欄位2)方法方法包括:普通方法、靜態方法和類方法,三種方法在記憶體中都歸屬於類,區別在於調用方式不同。--普通方法:由對象調用;至少一個self參數;執行普通方法時,自動將調用該方法的對象賦值給self;--類方法:由類調用; 至少一個cls參數;執行類方法時,自動將調用該方法的類複製給cls;--靜態方法:由類調用;無預設參數;
如:相同點:對於所有的方法而言,均屬於類(非對象)中,所以,在記憶體中也只儲存一份。不同點:方法調用者不同、調用方法時自動傳入的參數不同。4.property classmethod staticmethod1)property #將一個方法,偽裝成屬性class Bmi(object): def __init__(self, name, weight, highe): self.name = name self.weight = weight self.height = highe @property def func(self): BMI = self.weight / (self.height ** 2) return BMIperson = Bmi(‘Tom‘, 80, 1.73)s = person.namess = person.func #將方法偽裝成屬性print(‘%s的BIM指數為%s‘ % (s, ss))--------------------------------------------------class Person(): def __init__(self, name, age): self.name = name self.__age = age if type(age) is int else print(‘重新輸入‘) @property #執行查詢操作自動執行此操作 def age(self): return self.__age @age.setter #執行更改操作執行此操作 def age(self, temp): self.__age = temp if type(temp) is int else print(‘重新輸入‘) @age.deleter #執行del操作自動執行此方法 def age(self): del self.__age2)classmethod----類方法:通過類名調用方法,類方法中第一個參數約定俗稱cls,python自動將類名傳給clsclass A: def func(self): # 普通方法 print(self) @classmethod def func0(cls): # 類方法 print(cls)a = A()a.func() # <__main__.A object at 0x105d8a438>A.func0() # <class ‘__main__.A‘>a1 = A()a1.func0() # 對象調用類方法,cls 得到的是類本身.****¥類方法應用情境1-類中一些方法不需要對象參與2-對類中靜態變數進行改變3-繼承中,父類得到子類的類空間例子:class A: age = 10 @classmethod def func(cls): print(cls.age)class B(A): age = 20B.func() # 203)staticmethod由類名調用,無預設參數,主要作用是:能夠使代碼清晰,複用性強!
Python物件導向之結構與成員