1
class Something(object):
    our_random = Something.random_thing

    @staticmethod
    def random_thing():
         return 4

もちろん、これは機能しません。メソッドを呼び出そうとすると、何かが存在しないからです。これもありません:

class Something(object):
    our_random = random_thing

    @staticmethod
    def random_thing():
         return 4

random_thing() の定義をクラスの上に配置するだけでこれを「解決」しましたが、これは面倒です。

4

2 に答える 2

3

.__init__()次に、イニシャライザで呼び出します。

class Something(object):
    def __init__(self):
        self.our_random = Something.random_thing()

または、定義後に静的メソッドを呼び出しますが、まだクラスを定義しています。これは静的メソッドであるため、__func__属性を介してアクセスする必要があります。

class Something(object):
    @staticmethod
    def random_thing():
        return 4

    our_random = random_thing.__func__()

呼び出すつもりがなかった場合は、別の名前でメソッドのコピーを作成してください。メソッドを定義した後で作成してください。

class Something(object):
    @staticmethod
    def random_thing():
        return 4

    our_random = random_thing   # our_random as an alias for random_thing

クラス本体は関数として実行され、関数のローカル名前空間がクラス属性を形成します。したがって、関数と同様に、他のオブジェクトを参照する場合は、それらが最初に定義されていることを確認する必要があります。

于 2013-05-31T21:06:11.363 に答える
2
class Something(object):
    @staticmethod
    def random_thing():
         return 4

    our_random = random_thing

クラス定義は名前空間を作成するため、クラスを通じてアクセスしなくても、クラス本体内で他の名前 (クラス属性) を参照できます。

于 2013-05-31T21:08:03.067 に答える