在python类中定义常量,是否真的需要自己?

The*_*dor 25 python visibility constants

我想在类中定义一组常量,如:

class Foo(object):
   (NONEXISTING,VAGUE,CONFIRMED) = (0,1,2)
   def __init__(self):
       self.status = VAGUE
Run Code Online (Sandbox Code Playgroud)

但是,我明白了

NameError: global name 'VAGUE' is not defined
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以定义这些常量,以便在课堂内可以看到而不诉诸globalself.NONEXISTING = 0等等?

Tho*_*ers 36

当您在类体中指定名称时,您将创建该类的属性.如果不直接或间接地引用该类,则无法引用它们.您可以Foo.VAGUE像其他答案一样使用,或者您可以使用self.VAGUE.您不必分配属性self.

通常,使用self.VAGUE就是你想要的,因为它允许子类重新定义属性,而不必重新实现使用它们的所有方法 - 这不是在这个特定的例子中看起来像一个明智的事情,但谁知道.


Mat*_*tus 7

尝试而不是:

self.status = VAGUE
Run Code Online (Sandbox Code Playgroud)

这个:

self.status = Foo.VAGUE
Run Code Online (Sandbox Code Playgroud)

你必须指定课程