3

私はそれがそのようなケースを持つように配線されていることを知っていますが、どういうわけか私はそれを持っています:

class foo
  #static method
  @staticmethod
  def test():
    pass

  # class variable
  c = {'name' : <i want to reference test method here.>}

それへの道は何ですか?

記録のために:

これは Python の最悪の慣行と見なされるべきだと思います。静的メソッドを使用することは、たとえそうであっても、本当にpythoishな方法ではありません...

4

2 に答える 2

5
class Foo:
    # static method
    @staticmethod
    def test():
        pass

    # class variable
    c = {'name' : test }
于 2010-02-03T18:05:59.317 に答える
4

問題は、Pythonの静的メソッドが記述子オブジェクトであるということです。したがって、次のコードでは:

class Foo:
    # static method
    @staticmethod
    def test():
        pass

    # class variable
    c = {'name' : test }

Foo.c['name']は記述子オブジェクトであるため、呼び出すことはできません。Foo.c['name'].__get__(None, Foo)()ここで正しく呼び出すには、入力する必要がありtest()ます。Pythonの記述子に慣れていない場合は、用語集を参照してください。Webにはたくさんのドキュメントがあります。また、このスレッドを見てください。これは、ユースケースに近いようです。

c簡単にするために、クラス定義のすぐ外にそのクラス属性を作成できます。

class Foo(object):
  @staticmethod
  def test():
    pass

Foo.c = {'name': Foo.test}

または、気になる場合は、のドキュメントに飛び込んで__metaclass__ください。

于 2010-02-04T10:54:24.853 に答える