Python基礎——@staticmethod與@classmethod
@staticmethod與隱式的靜態成員方法的區別在於是否允許例項物件呼叫該靜態方法(後者是不允許的)
@staticmethod與@classmethod的區別在於後者無論是被例項呼叫還是被類物件呼叫傳遞進來的第一個引數永遠是類物件(class object)
@staticmethod的用法
使用@staticmethod
宣告的成員函式具有C++類的靜態成員函式的相同的用法,既可以被物件呼叫,更可以被類本身呼叫,因為靜態成員函式屬於類本身。
在python類的定義中,在成員函式的引數列表中如果不指定第一個引數為self
(也即c++中的this
指標),標識著該方法屬於類的方法,但與@staticmethod
的不同之處在於,不可被物件呼叫。
class Dog(object):
count = 0
dogs = []
def __init__(self, name):
self.name = name
Dog.count += 1
Dog.dogs.append(name)
def bar(self, n):
print('{} says {}'.format(self.name, 'bar'*n))
def rollCall(n): # this is a implicitly a class method
print('There are {} dog.'.format(Dog.count))
if n >= Dog.count or n < 0:
print('They are :')
for dog in Dog.dogs:
print(' {}'.format(dog))
else:
print('The dog indexed {} is {}'.format(n, Dog.dogs[n]))
if __name__ == '__main__':
fido = Dog('Fido')
Dog.rollCall(0) # 正確
fido.rollCall(0) # 拋異常
如果將rollCall()
宣告為@staticmethod
,使用例項物件也可呼叫該方法。
@staticmethod與@classmethod的差異
注意區別類物件(class object)與例項物件(instance object)
class Kls(object):
no_inst = 0
def __init__(self):
Kls.no_inst += 1
@classmethod
def get_no_of_instance(cls_obj):
return cls_obj.no_inst
ik1 = Kls()
ik2 = Kls()
print(ik1.get_no_of_instance()) # 2
print(Kls.get_no_of_instance()) # 2
使用@classmethod
成員函式的一大優勢在於,無論是通過例項物件(instance object,如ik1)還是通過類物件(class object,如Kls)呼叫該型別方法時,傳遞進來的第一個引數總是該類物件(也就是將Kls傳遞給cls_obj)。
相關文章
- Python中的@staticmethod和@classmethod的區別PythonSSM
- python函式每日一講 - classmethod()Python函式SSM
- Python基礎-類與物件Python物件
- django classonlymethod 和 python classmethod的區別DjangoPythonSSM
- python SQL基礎與python互動PythonSQL
- python 基礎之模組與包Python
- Python回顧與整理1:Python基礎Python
- Python基礎篇-Python基礎01Python
- 零基礎入門Python教程4節與基礎語法Python
- python基礎中的基礎Python
- Python3基礎18——類與物件Python物件
- python爬蟲基礎與http協議Python爬蟲HTTP協議
- Python基礎語法(七:類與物件)Python物件
- Python基礎12(模組與datetime模組)Python
- Python基礎筆記01-Python基礎Python筆記
- python基礎 - python名稱空間與作用域Python
- python 基礎Python
- Python 基礎 (-)Python
- python基礎①Python
- python基礎Python
- Python基礎:語法基礎(3)Python
- Python基礎面試題30問!Python基礎教程Python面試題
- Python基礎(八) 模組的引入與定義Python
- python資料分析與視覺化基礎Python視覺化
- Python基礎——模組Python
- Python列表基礎Python
- 【Python基礎】字典Python
- Python_基礎Python
- python基礎(五)Python
- python基礎(一)Python
- python基礎題Python
- 03 - Python 基礎Python
- Python基礎—字串Python字串
- python基礎12Python
- Python基礎篇Python
- Python基礎教程Python
- Python基礎(下篇)Python
- python基礎3Python