2011-01-06 50 views
155

爲什麼有時使用cls而不是self作爲Python類中的一個參數?什麼是在Python類中使用的'cls'變量?

例如:

class Person: 
    def __init__(self, firstname, lastname): 
     self.firstname = firstname 
     self.lastname = lastname 

    @classmethod 
    def from_fullname(cls, fullname): 
     cls.firstname, cls.lastname = fullname.split(' ', 1) 

回答

46

它的一類方法的情況下的二手。查詢this reference瞭解更多詳情。

編輯:由阿德里安澄清,這是一個約定。您實際上可以使用任何東西,但使用clsselfPEP8)。

173

"self""cls"之間的區別在PEP 8中定義。正如Adrien所說,這不是強制性的。這是一種編碼風格。 PEP 8說:

功能和方法的參數

始終使用self的第一個參數實例方法。

始終使用cls作爲類方法的第一個參數。

2

這是一個很好的問題,但並不像問題那麼簡單。 有「自我」和「CLS」使用的方法之間的差異,雖然類比他們是在同一個地方

def moon(self,moon_name): 
 
    self.MName =moon_name 
 
    
 
#but here cls method its use is different 
 

 

 
def moon(cls,moon_name): 
 
    instance=cls() 
 
    instance.MName=moon_name

現在你可以看到兩者都是月亮的功能,但一個可以類,而內部使用其他功能名稱moon可以用於任何類。

對於實際的編程方法:

在設計圈類,我們使用區域方法,CLS,而不是自我,因爲我們不希望區域被限制在特定的類只圈做。

相關問題