在同一类中列出静态属性时Python中的NameError
我有以下python类:在同一类中列出静态属性时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
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东西引用了类名。这给了我和我最初想要的一样的效果。这是真的,你可以通过这种方式实现你想要的!乐意帮忙:)