9

我想在 python 中有这样的简单类常量:

class FooBarBaz:
    BAR = 123

    @staticmethod
    def getBar():
        return BAR # this would not work, of course

        return FooBarBaz.BAR # this would work but is "way too long"

有没有更短的方法来从方法内部引用类本身,而不是当前实例?它不仅适用于静态方法,而且通常适用于__class__关键字或其他东西。

4

2 回答 2

16

您需要@classmethod而不是@staticmethod- 类方法将获得对该类的引用(方法将在其中获得self),因此您可以在其上查找属性。

class FooBarBaz:
    BAR = 123

    @classmethod
    def getBar(cls):
        return cls.BAR
于 2013-04-23T10:10:20.460 回答
12

实际上,__class__在python 3中有:

Python 3.2.3 (v3.2.3:3d0686d90f55, Apr 10 2012, 11:25:50) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class A:
...     @staticmethod
...     def foo():
...         print(__class__)
... 
>>> A.foo()
<class '__main__.A'>
>>> 

请参阅http://www.python.org/dev/peps/pep-3135了解添加它的理由。

不知道如何在 py2 中实现相同的目标,我想这是不可能的

于 2013-04-23T10:10:38.620 回答