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 に答える