我最近上过课。让我们说这个类声明如下。
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 :(得分: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 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
>>>