一、類方法
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...