Python:类本身的静态类属性

时间:2016-10-25 15:50:44

标签: 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访问它。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以在定义类之后立即分配给类变量。

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

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

答案 1 :(得分:-1)

也许可以使用继承和custom descriptorsPython 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
>>>