python中類方法 靜態方法 私有屬性和私有方法

2021-09-17 18:42:16 字數 2442 閱讀 9180

一、類方法

class toy(object):

# 1.使用賦值語句定義類屬性,記錄所有玩具的數量

count = 0

def __init__(self,name):

self.name = name

# 讓類屬性 +1

toy.count += 1

@classmethod

def show_toy_count(cls):

print('玩具物件的數量 %d' %(cls.count))

# 建立玩具物件

toy1 = toy('樂高')

#toy2 = toy('泰迪熊')

# 呼叫類方法

toy.show_toy_count()

結果為:玩具物件的數量 1

二、靜態方法

靜態方法:

在開發中,如果需要在乙個類中封裝乙個方法 這個方法

既不需要訪問例項屬性或者呼叫例項方法

也不需要訪問類屬性或者呼叫類方法

這個時候,我們就可以把這個方法封裝成乙個鏡頭方法

class cat(object):

@staticmethod

def call():

print('喵喵~')

# 通過 類名. 呼叫靜態方法

cat.call()

# 不需要建立物件,直接就可以使用

三、私有屬性和私有方法

class women(object):

def __init__(self,name):

self.name = name

self.__age = 18

def __secrte(self):

print(self.__age)

lily = women('lily')

print(lily.name)

#print(lily.__age)

lily.__secrte()

怎麼保證 這些物件只有乙個?

__new__方法:

我們用 類名. 的方式建立物件的時候,python直譯器會幫我們做兩件事情,是哪兩件事情呢?

1.為物件分配空間 2.物件初始化

使用類名()建立物件時,python的直譯器首先會呼叫__new__方法為物件分配空間

__new__是乙個由object基類提供的內建的靜態方法,主要有兩個作用:

在記憶體中為物件分配空間

返回物件的引用

python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給__init__方法

#new:負責給物件分配空間init(初始化方法)負責給物件初始化

我們要重寫new方法,使用類名()建立物件的時候,返回的都是同乙個位址

重寫__new__方法的**非常固定:

繼承自父類方法

返回父類方法呼叫_new__方法的結果

重寫__new__方法一定要return object.new(cls)

否則python的直譯器得不到分配了空間的物件引用,就不會呼叫物件的初始化方法

class musicplayer(object):

instance = none

def __new__(cls, *args, **kwargs):

# 第乙個引數cls:哪乙個類呼叫就傳遞哪乙個類

# 第二個引數*args:多值元組

# 第三個引數*kwargs:多值的字典

# 重寫了object這個父類的方法

# print('建立物件,分配空間')

# # 1.建立物件時,new方法會被自動呼叫

# print('建立物件,分配空間')

# # 2.為物件分配空間

# # __new__方法是乙個類方法,在呼叫的時候,第乙個引數為cls

# instance = object.__new__(cls)

## # 3.返回物件的引用

# return instance

# 判斷類屬性是否是空物件

if cls.instance is none:

# 2.呼叫父類方法,為第乙個物件分配空間

cls.instance = object.__new__(cls)

return cls.instance

player = musicplayer()

print(player)

player2 = musicplayer()

print(player2)

看到的結果是:python直譯器得不到分配了空間的物件引用

就不會呼叫物件的初始化方法

Python中類方法和靜態方法

要在類中使用靜態方法,需在靜態方法前面加上 staticmethod標記符,以表示下面的成員函式是靜態函式。使用靜態方法的好處 其函式不需要self引數,可以通過類呼叫該方法,不需要定義該類例項 當然通過類例項呼叫也沒有問題 類方法可以通過類或它的例項來呼叫,但 該方法的 第乙個引數cls是定義該方...

python中靜態方法和類方法

方法是作為類屬性儲存的函式 def get size self pass在python2,3中的不同點。2 pizza.get size 會報乙個未繫結的函式的錯誤 3 pizza.get size 會報乙個缺少引數的錯誤,即,python3可以動態的傳入方法所屬於的類的任意乙個例項 靜態方法 靜態...

Python 類方法 靜態方法

1 我們已經討論了類 物件可以擁有像函式一樣的方法,這些物件方法與函式的區別只是乙個額外的self變數 coding utf 8 usr bin python filename method.py class person grade 1 def init self,name self.name n...