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

时间:2017-11-03 18:59:15

标签: 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("__")]

但是它显示了NameError,表示未定义的变量list_stuff

根据this,它应该有用。

我也尝试过:

list_stuff().__dict__.items()

但仍然是同样的错误。我在这里缺少什么?

4 个答案:

答案 0 :(得分:1)

在Python中,您无法在类体中引用该类。 我在这里看到的问题是你指的是类定义中的类list_stuff。要解决这个问题,只需在课堂外移动该行:

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

stufflist = [v for k,v in list_stuff.__dict__.items() if not k.startswith("__")]

以下是documentation on classes

答案 1 :(得分:1)

我最终这样做了:

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("__")]

与我原意的效果相同。

感谢大家的快速回复。

答案 2 :(得分:0)

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

试试这个:

render(){
    return (
        <div>
            <button type="button">Get Random Memory</button>
            <h1>Memory App</h1>
            { this.state.memory ? <MemoryImage memory={this.state.memory}/> : '' }
            { this.state.memory ? <MemoryText memory={this.state.memory}/> : '' }
        </div>
    );
}

答案 3 :(得分:0)

您可以创建一个生成所需列表属性的方法。首先,在运行get_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>]