2016-10-25 4 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

Смежные вопросы