在静态方法中引用自己的类

Der*_*ang 2 python

是否有在静态方法中引用自己的类的简写?

说我有这段代码:

class SuperLongClassName(object):

    @staticmethod
    def sayHi():
        print 'Hi'

    @staticmethod
    def speak():
        SuperLongClassName.sayHi()  # Is there a shorthand?
Run Code Online (Sandbox Code Playgroud)

Ale*_*MDC 9

是的,用@classmethod而不是@staticmethod.@staticmethod如果您不需要,可以删除额外的类参数.

class SuperLongClassName(object):

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

    @classmethod
    def speak(cls):
        cls.sayHi()
Run Code Online (Sandbox Code Playgroud)


use*_*ica 5

你可能想要一个classmethod.它的作用类似于a staticmethod,但是将类作为隐式的第一个参数.

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

Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass.foo() # prints Claaa...
Run Code Online (Sandbox Code Playgroud)

警告:

class Subclaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass(
        Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass):
    pass

Subclaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass.foo() # prints Subclaaa...
Run Code Online (Sandbox Code Playgroud)

或者,在模块级别为类定义更短的别名:

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

# prints True
print (Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2 is
       Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2.foo())
Run Code Online (Sandbox Code Playgroud)