在python中,類的方法有如下三種:
(1)例項方法(即:物件方法)
(2)類方法
(3)靜態方法
下面,將對這三種方法進行總結。
通常情況下,類中的方法預設是例項方法,在定義的時候不需要使用使用特殊的關鍵字進行標識。
對於例項方法,我們需要了解以下的基本知識:
(1)例項方法至少有乙個引數,預設該引數的名字為「self」(也可以是其他的),若有其他引數,可以跟在該引數後面
(2)例項方法有兩種呼叫方式:
第一種:通過例項物件呼叫,該方法不需要手動傳遞例項引數,編譯器在後期載入的時候會把例項p載入至例項引數,具體參見**示例
第二種:通過類名稱呼叫,該方法需要手動傳遞例項引數,具體參見**示例
注意: 從上面的兩種呼叫方法我們可以知道,例項方法被呼叫時要向它的第乙個引數傳遞例項物件。
#例項方法**
class
student
: name=
"jom"
age=
21 #例項方法有兩個引數的情況,其中self為預設引數,需要向它傳遞例項物件,str為字串型別,由使用者在呼叫時自行新增
def instanceshow
(self,str)
:print
(self,self.name,self.age,str)
p=student()
print
("輸出例項p:"
)print
(p)print
("輸出類名稱student:"
)print
(student)
print
("使用例項物件呼叫的結果:")p.
instanceshow
("例項物件呼叫"
)print
("使用類名稱呼叫的結果:"
)student.
instanceshow
(p,"類名稱呼叫"
(1)類方法要使用裝飾器@classmethod來修飾,一般情況,第一引數預設命名為cls(cls=class,可以是別的名字)
(2)類方法有兩種呼叫方式:
第一種:使用類的名稱呼叫,參見**示例
第二種:使用例項呼叫,參見**
注意: 從以上的兩種呼叫方式,我們需要知道,類方法呼叫的時候,會向他的第乙個引數傳遞類的名稱
#類方法**
class
student
: name=
"jom"
age=
21 @classmethod
def classshow
(cls,str)
:print
(cls,cls.name,cls.age,str)
p=student()
print
("輸出例項p:"
)print
(p)print
("輸出類名稱student:"
)print
(student)
print
("使用例項呼叫的結果:")p.
classshow
("例項呼叫"
)print
("使用類名稱呼叫的結果:"
)student.
classshow
("類名稱呼叫"
靜態方法,和我們之前在其他語言中學到的靜態函式時很相似的,去唄就在於,靜態方法,定義在類的命名空間中,而函式定義在全域性命名空間中。
(1)靜態函式通過裝飾器@staticmethod修飾
(2)靜態函式的呼叫有以下兩種方式:
第一種:例項呼叫,參見**
第二種:類名稱呼叫,參見**
靜態方法沒有類似 self、cls 這樣的特殊引數,因此 python 直譯器不會對它包含的引數做任何類或物件的繫結。也正因為如此,類的靜態方法中無法呼叫任何類屬性和類方法。
注意: 我們需要知道在呼叫靜態函式時不會向函式傳遞任何特殊引數,在上面的例項方法和類方法中都有自己的特殊引數,用來和類或者物件進行**使用,而靜態方法是沒有的。雖然它沒有引數,但是不意味著它沒有引數,它也是可以擁有普通引數的,比如字串型別。
#靜態方法**
class
student
: name=
"jom"
age=
21 @staticmethod
#str是普通引數,非特殊引數,沒有和其他類或者物件進行**
def staticshow
(str)
:print
(student,student.name,student.age,str)
p=student()
print
("輸出例項p:"
)print
(p)print
("輸出類名稱student:"
)print
(student)
print
("使用例項呼叫的結果:")p.
staticshow
("例項呼叫"
)print
("使用類名稱呼叫的結果:"
)student.
staticshow
("類名稱呼叫"
對於以上三種類的方法,我們需要知道以下幾點:
下面我們將例項方法,類方法和靜態方法放在同乙個**中,進行對比。
class
student
: name=
"jom"
age=
21 @staticmethod
#str是普通引數,非特殊引數,沒有和其他類或者物件進行**
def staticshow()
:print
(student.name,student.age)
@classmethod
def classshow
(cls)
:print
(cls.name, cls.age)
def instanceshow
(self)
:print
(self.name, self.age)
s=student()
print
("使用靜態方法:")s.
staticshow()
# s.age=
11# print
("修改age後再次使用靜態方法:"
)# s.
staticshow()
p=student()
print
("使用類方法:")p.
classshow()
p.name=
"tom"
print
("修改name後再次使用類方法:")p.
classshow()
q=student()
print
("使用例項方法:")q.
instanceshow()
q.name=
"alen"
print
("修改name後再次使用例項方法:")q.
Python 例項方法 類方法 靜態方法區別總結
二 示例 注意 不管self引數,還是cls引數,都是一種約定俗成的用法,其實是可以使用其他的引數名代替。但是不建議使用其他引數名,畢竟 不是只是寫給自己看的。class a object def m1 self,n print self self classmethod def m2 cls,n ...
Python學習筆記 類 類方法 類屬性
類 類方法 類屬性練習 class student company xx大學 類屬性 count 0 類屬性 def init self,name,score 初始化 給各屬性賦值 self.name name 例項屬性 self.score score student.count 1def say...
python學習筆記 類
brad turtle.turtle 使用這條命令時,是指在turtle這個檔案裡有乙個類 turtle。在呼叫這條命令時,其實是呼叫裡邊的 init 函式。init函式的作用是在記憶體中分配空間來建立具體的物件。client rest.twiliorestclient 使用這條命令時,是指在res...