2016-10-25 17 views
0

最近クラスを作成しました。クラスが以下のように宣言されているとしましょう。Python:クラス自体の静的クラス属性

class MyClass(object): 
    def __init__(self, modifiers): 
     .... 

問題は、私はクラスの定数のインスタンスを作成したい、次のとおりです。

残念ながら
class MyClass(object): 
    def __init__(self, modifiers): 
     .... 

    CONSTANT_MEMBER_1 = MyClass(my_modifiers) 
    CONSTANT_MEMBER_2 = MyClass(my_modifiers) 

、Pythonはエラーで、私はそうすることはできません。

E NameError: global name 'MyClass' is not defined 

この問題の解決策はありますか?

代わりに、呼び出されるたびに同じオブジェクトを返すクラスの「静的」メソッドを作成することもできます(たとえば、MyClass.CONSTANT_MEMBER_1())。しかし、私はまだMyClass.CONSTANT_MEMBER_1を使ってアクセスしたいと思う。

ありがとうございました。

+0

あなたはもう少しユースケースを説明できますか? 「静的な属性またはメソッド」はここでは具体的な意味がありますが、参照するには「静的なメンバー」を使用しているようです:「変更されないクラスのインスタンス」 – brianpck

+0

@brianpckはい、クラスの "。編集されました。ありがとう。 – sokokaleb

答えて

1

クラスが定義された直後に、クラス変数に割り当てることができます。

class MyClass(object): 
    def __init__(self, modifiers): 
     .... 

MyClass.CONSTANT_MEMBER_1 = MyClass(my_modifiers) 
MyClass.CONSTANT_MEMBER_2 = MyClass(my_modifiers) 
-1

たぶん継承とcustom descriptorsを利用して、Python Descriptors Demystified

class MyClass(object): 
    def __init__(self, color): 
     self.color = color 
    def __repr__(self): 
     return 'I am {}'.format(self.color) 

class Foo(MyClass): 
    ConstantMember_blue = MyClass('blue') 
    ConstantMember_red = MyClass('red') 

f = Foo('green') 

>>> f 
I am green 
>>> f.ConstantMember_blue 
I am blue 
>>> f.ConstantMember_red 
I am red 
>>> Foo.ConstantMember_blue 
I am blue 
>>> Foo.ConstantMember_red 
I am red 
>>> 
+0

Downvoteの説明がうまくいくでしょう。 – wwii

関連する問題