2016-10-25 3 views
0

최근 클래스를 만들었습니다. 클래스가 아래와 같이 선언되었다고 가정 해 봅시다. 오류,Python : 클래스 자체의 정적 클래스 속성

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

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

불행하게도, 파이썬은 나에게 그렇게하도록 허용하지 않습니다 :

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

, 나는 클래스의 상수 인스턴스를 생성 할

E NameError: global name 'MyClass' is not defined 

이 문제에 대한 해결책은 무엇입니까?

한 가지 대안은 호출 될 때마다 동일한 객체를 반환하는 클래스에 '정적'메소드를 만드는 것입니다 (예 : MyClass.CONSTANT_MEMBER_1()). 하지만 나는 여전히 MyClass.CONSTANT_MEMBER_1을 사용하여 액세스하는 것을 선호한다고 생각합니다.

감사합니다.

+0

당신이 사용 사례를 설명 조금 더 수, 상속 및 custom descriptors를 사용합니다? "정적 속성 또는 메소드"는 여기에서 특별한 의미가 있지만 참조 할 때 "정적 멤버"를 사용하는 것 같습니다 : "변경되지 않는 클래스의 인스턴스" – 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

어쩌면 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