【问题标题】:Refer to own class in a static method在静态方法中引用自己的类
【发布时间】:2013-07-10 08:53:39
【问题描述】:

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

假设我有这段代码:

class SuperLongClassName(object):

    @staticmethod
    def sayHi():
        print 'Hi'

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

【问题讨论】:

标签: python


【解决方案1】:

是的,使用@classmethod 代替@staticmethod@staticmethod 的全部意义在于,如果您不需要,将多余的类参数删除。

class SuperLongClassName(object):

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

    @classmethod
    def speak(cls):
        cls.sayHi()

【讨论】:

    【解决方案2】:

    您可能想要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())
    

    【讨论】:

      猜你喜欢
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2015-12-22
      • 2016-02-16
      • 1970-01-01
      相关资源
      最近更新 更多