Python的例項方法,靜態方法,類方法與單例模式

2021-10-17 03:47:24 字數 3454 閱讀 5546

1.私有許可權

封裝的意義:

將屬性和方法放到一起做為乙個整體,然後通過例項化物件來處理;

隱藏內部實現細節,只需要和物件及其屬性和方法互動就可以了;

對類的屬性和方法增加 訪問許可權控制。

**私有許可權:**在屬性名和方法名 前面 加上兩個下劃線 __

類的私有屬性 和 私有方法,都不能通過物件直接訪問,但是可以在本類內部訪問;

類的私有屬性 和 私有方法,都不會被子類繼承,子類也無法訪問;

私有屬性 和 私有方法 往往用來處理類的內部事情,不通過物件處理,起到安全作用。

demo 私有方法

demo 私有屬性

類部呼叫私有屬性和私有方法

demo:私有方法和私有屬性

子類通過呼叫通過例項化方法呼叫私有屬性和方法,不能直接呼叫

私有屬性和私有方法

總結:

1). 私有屬性,可以在類內部通過self呼叫,但不能通過物件訪問

2). 私有方法,可以在類內部通過self呼叫,但不能通過物件訪問

3). 物件不能訪問私有許可權的屬性和方法

4). 子類不能繼承父類私有許可權的屬性和方法

5). python中沒有像c++中 public 和 private, protected 這些關鍵字來區別公有屬性和私有屬性。

6). python是以屬性命名方式來區分,如果在屬性和方法名前面加了2個下劃線』__』,則表明該屬性和方法是私有許可權,否則為公有許可權。

修改私有屬性的值

如果需要修改乙個物件的屬性值,通常有2種方法

物件名.屬性名 = 資料 ----> 直接修改

物件名.方法名() ----> 間接修改

**私有屬性不能直接訪問,所以無法通過第一種方式修改,**一般的通過第二種方式修改私有屬性的值:定義乙個可以呼叫的公有方法,在這個公有方法內訪問修改。

修改私有屬性的值

總結:

現代軟體開發中,通常會定義get_***()方法和set_***()方法來獲取和修改私有屬性值

get_***()方法–>返回私有屬性的值

set_***()方法–>接收引數,修改私有屬性的值

物件不能訪問私有許可權的屬性和方法,可以通過訪問公有方法set_money()來修改私有屬性的值,可以通過訪問公有方法get_money()來獲取私有屬性的值

類屬性: 可以通過類或者例項物件呼叫

例項屬性(物件屬性): 可以通過例項化物件呼叫,類不能呼叫

通過例項(物件)去修改類屬性:物件修改類屬性,只對本物件有效果,對別的物件沒有影響

靜態方法和類方法

類方法是類物件所擁有的方法,需要用修飾器@classmethod來標識其為類方法,對於類方法,第乙個引數必須是類物件,一般以cls作為第乙個引數(當然可以用其他名稱的變數作為其第乙個引數,但是大部分人都習慣以』cls』作為第乙個引數的名字,就最好用』cls』了),能夠通過例項物件和類物件去訪問。

2. 靜態方法

需要通過修飾器@staticmethod來進行修飾,靜態方法不需要多定義引數,可以通過物件和類來訪問。

class people(object):

country = 『china』

@staticmethod

#靜態方法

def get_country():

return people.country

p = people()

通過物件訪問靜態方法

print(p.get_country())

通過類訪問靜態方法

print(people.get_country())

靜態方法中不需要額外定義引數,因此在靜態方法中引用類屬性的話,必須通過類例項物件來引用,呼叫靜態方法可以通過物件或者類呼叫

3. 例項方法

例項方法中的第乙個引數是self,只能通過物件來訪問。

class people(object):

def selfmethod(self):

print(「我是例項方法」)

p = people()

p.selfmethod()

#people.selfmethod() #報錯

例項方法中需要self引數,因此呼叫例項方法只能通過例項物件呼叫也可以通過類呼叫但是一般不這樣用

例項方法,靜態方法,類方法

總結:

類方法使用@classmethod裝飾,第乙個引數為類(cls),呼叫時可以通過類的例項或者類本身來呼叫。

例項方法定義時第乙個引數為類的乙個例項(self),呼叫時必須通過例項呼叫。

靜態方法使用@staticmethod裝飾,呼叫時可以使用類的例項或者類本身來呼叫。

__new__方法

總結

1). __new__至少要有乙個引數cls,代表要例項化的類,此引數在例項化時由python直譯器自動提供

2). __new__必須要有返回值,返回例項化出來的例項,這點在自己實現__new__時要特別注意,可以return父類__new__出來的例項,或者直接是object的__new__出來的例項

3). __init__有乙個引數self,就是這個__new__返回的例項,__init__在__new__的基礎上可以完成一些其它初始化的動作,__init__不需要返回值

4). 我們可以將模擬作製造商,__new__方法就是前期的原材料購買環節,__init__方法就是在有原材料的基礎上,加工,初始化商品環節

單例模式

永遠用乙個物件得例項,避免新建太多例項浪費資源

實質:使用__new__方法新建類物件時先判斷是否已經建立過,如果建過就使用已有的物件

python例項方法 靜態方法 類方法

class foo object deftest self 定義了例項方法 print object classmethod deftest2 clss 定義了類方法 print class staticmethod deftest3 定義了靜態方法 print static 1 例項方法就是類的例...

Python類方法 靜態方法 例項方法

靜態方法是指類中無需例項參與即可呼叫的方法 不需要self引數 在呼叫過程中,無需將類例項化,直接在類之後使用.號運算子呼叫方法。通常情況下,靜態方法使用 staticmethod裝飾器來宣告。class classa object staticmethod def func a print hel...

Python例項方法,類方法,靜態方法

class foo object def test self 定義了例項方法 print object classmethod def test2 cls 定義了類方法 print class staticmethod def test3 定義了靜態方法 print static 1 例項方法就是類...