2013-07-11 51 views
1

在靜態方法中引用自己的類是否有速記?在靜態方法中引用自己的類

說我有這段代碼:

class SuperLongClassName(object): 

    @staticmethod 
    def sayHi(): 
     print 'Hi' 

    @staticmethod 
    def speak(): 
     SuperLongClassName.sayHi() # Is there a shorthand? 
+6

使您的班級名稱縮短。 –

+0

叫它無類名 – aaronman

+6

你應該使用一個類的方法,而不是一個靜態方法 [更多資訊] [1] [1]的:http://stackoverflow.com/問題/ 9744223 /蟒差之間靜電的方法-VS-類方法 –

回答

4

你可能需要一個classmethod。它的工作原理類似於staticmethod,但將該類作爲隱含的第一個參數。

class Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass(object): 
    @classmethod 
    def foo(cls): 
     print cls.__name__ 

Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass.foo() # prints Claaa... 

警告:

class Subclaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass(
     Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass): 
    pass 

Subclaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass.foo() # prints Subclaaa... 

另外,在模塊級定義爲類較短的別名:

class Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2(object): 
    @staticmethod 
    def foo(): 
     return _cls2 
_cls2 = Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2 

# prints True 
print (Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2 is 
     Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2.foo()) 
8

是,使用@classmethod代替@staticmethod@staticmethod的全部要點是如果您不需要額外的類參數,請刪除它。

class SuperLongClassName(object): 

    @classmethod 
    def sayHi(cls): 
     print 'Hi' 

    @classmethod 
    def speak(cls): 
     cls.sayHi() 
相關問題