class A(object):
# 構造函數
def __init__(self, title1):
self.title = title1
print(self.title)
# 實例函數
def foo(self, title2):
print(title2)
# 靜態函數
@staticmethod
def static_foo():
print("靜態方法")
# 類函數
@classmethod
def cls_foo(cls):
cls.foo(a,"類函數調用實例函數")
print("類方法")
構造函數 __ init __(self)
主要用於類傳參
a = A(“構造函數”)
#title1=“構造函數”
實例方法 foo(self,title2)
主要用於在類中封裝一個額外的功能
第一個參數必須是self,一般情況下調用只能用實例化對象調用,不能用類調用,但是非要用類調用時,需要將實例化對象傳遞給self(適用於3.x Python)
a.foo(“實例函數”) #實例化調用
A.foo(a,“實例函數類調用”)
靜態方法 static_foo()
主要用於在類中封裝一個額外的功能,但是使用時我們並不希望調用的時候還先要創建實例化對象,與類本身沒有聯繫,相當於類中一個獨立的函數
創建時用@staticmethod裝飾器裝飾,聲明爲靜態函數,可以用類調用也可以用實例化對象調用
a.static_foo() #實例化對象調用
A.static_foo() #類調用(常用)
類方法 cls_foo(cls)
主要將類當做參數進行了傳遞,相當於將類當成了對象,可以調用該類中的所有方法
創建時用@classmethod裝飾器裝飾,聲明爲類函數,第一個參數必須爲cls,可以用類調用也可以用實例化對象調用
a.cls_foo() #實例化對象調用
A.cls_foo() #類調用(常用)
總結:
1.實例方法,靜態方法,類方法三者中除了實例方法被類調用時要將實例化對象傳遞給 self外,另外兩個都可以直接用類或者是類的實例化對象調用。
2.類方法和靜態方法主要用於不創建實例化對象的情況下,因爲如果每次調用類中的方法時都創建實例化對象,會對系統造成很大的壓力,造成系統資源浪費
3.實例方法第一個參數爲self,靜態方法與類無關聯,類方法第一個參數爲cls,相當於將類當做對象進行了傳遞