Python NameError:未定义名称类_uinit__;方法中的错误

Python NameError:未定义名称类_uinit__;方法中的错误,python,Python,我试图初始化一个实例,但每次都会抛出一个错误: import random class cGen: attributes = ['a','b','c'] def __init__(self): self.att = random.choice(attributes) 我可以很好地导入该类,但出现错误: c1=cGen() 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“\xGen.py”,第288行,在__ self.att=random.choic

我试图初始化一个实例,但每次都会抛出一个错误:

import random
class cGen:
    attributes = ['a','b','c']
    def __init__(self):
        self.att = random.choice(attributes)
我可以很好地导入该类,但出现错误:

c1=cGen() 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“\xGen.py”,第288行,在__ self.att=random.choice(属性) NameError:未定义名称“属性”
这里缺少什么?

属性在类中定义,因此您需要通过类名引用它:

import random
class cGen:
    attributes = ['a','b','c']
    def __init__(self):
        self.att = random.choice(cGen.attributes)

您将
属性定义为类成员。然后必须通过
self.attributes
在类内调用它。您还可以在
\uuuu init\uuuu
中定义属性,并将生成的随机选择绑定到
self.att
。但是只要
['a',b',c']
是固定的(常量),这样做也可以;在
\uuuu init\uuuu
内部,在封闭范围内查找未在本地定义的非限定名称,该范围是
语句出现的范围,而不是
语句的主体

您需要通过实例本身或实例的类型来查找该值

def __init__(self):
    self.att = random.choice(self.attributes)  # or type(self).attributes

如果列表是常量,只需执行
self.att=random.choice(['a','b','c'])
@Tomerikoo,但数据将不会继承到其他类。