在同一类中列出静态属性时Python中的NameError

在同一类中列出静态属性时Python中的NameError,python,static-variables,Python,Static Variables,我有以下python类: class list_stuff: A = 'a' B = 'b' C = 'c' stufflist = [v for k,v in list_stuff.__dict__.items() if not k.startswith("__")] 但它显示一个名称错误,表示未定义变量list\u stuff 根据中国的经验,它应该会起作用 我还尝试了: list_stuff().__dict__.i

我有以下python类:

class list_stuff:    
        A = 'a'
        B = 'b'
        C = 'c'
        stufflist = [v for k,v in list_stuff.__dict__.items() if not k.startswith("__")]
但它显示一个名称错误,表示未定义变量
list\u stuff

根据中国的经验,它应该会起作用

我还尝试了:

list_stuff().__dict__.items()

但还是同样的错误。我在这里遗漏了什么?

问题似乎是缩进,因为您实际上是从内部调用类

试试这个:

class list_stuff:    
    A = 'a'
    B = 'b'
    C = 'c'
stufflist = [v for k,v in list_stuff.__dict__.items() if not k.startswith("__")]

在Python中,不能引用类主体中的类。 我在这里看到的问题是,您指的是类定义中的类
list\u stuff
。要解决此问题,只需将该行移到类外:

class list_stuff:    
    A = 'a'
    B = 'b'
    C = 'c'

stufflist = [v for k,v in list_stuff.__dict__.items() if not k.startswith("__")]
以下是我最后做的事情:

class list_stuff:    
    A = 'a'
    B = 'b'
    C = 'c'

    @classmethod
    def stufflist(cls):
        return [v for k,v in cls.list_stuff.__dict__.items() if not k.startswith("__")]
这和我的初衷是一样的


感谢大家的快速回复。

您可以创建一个方法来生成所需的列表属性。在运行
get\u list()
方法之前,首先需要生成该类的实例

class list_stuff():
    A = 'a'
    B = 'b'
    C = 'c'  

def get_list(self):
    self.thelist = [v for k,v in list_stuff.__dict__.items() if not k.startswith("__")]
    return self.thelist

list_a = list_stuff()
print list_a.get_list()
print list_a.thelistenter code here
这就是它的回报:

['a', 'b', 'c', <function get_list at 0x7f07d6c63668>]
['a', 'b', 'c', <function get_list at 0x7f07d6c63668>]
['a','b','c',]
['a','b','c',]

试试这个:从内部看似乎很难。胡说八道。未定义的变量不是语法错误。它是一个有效的名称错误。但是我想把它保存在类中,所以我最终使用了@classmethod,然后用cls.list\u东西引用了类名。这给了我和我最初想要的一样的效果。这是真的,你可以通过这种方式实现你想要的!乐意帮忙:)