我真的不知道我应该选择什么标题。无论如何,我有这样的代码(这是fixtures):
from fixture import DataSet
class CategoryData(DataSet):
class cat1:
name = 'Category 1'
class cat2:
name = 'Category 2'
parent = cat1
问题是我不能像cat2那样在cat2中引用cat1:
File "/home/julas/cgp/cgp/datasets/__init__.py", line 11, in cat2
parent = cat1
NameError: name 'cat1' is not defined
我该怎么做?
答案 0 :(得分:3)
这里有两个问题。
首先,Python不会为您执行嵌套作用域。要访问CategoryData.cat1
,您需要拼写出来。
其次,更大的问题是,没有办法从那里访问CategoryData
:该类尚未定义,因为您正在定义它。如果你这样做:
class Object(object):
a = 1
b = Object.a
它将失败,因为在类定义结束之前不会分配Object
的值。你可以把它想象成这样:
class _unnamed_class(object):
a = 1
b = Object.a
Object = _unnamed_class
无法从分配a
的位置引用b
,因为尚未为包含类指定其名称。
为了将parent
指定为类属性,您需要在包含类实际存在之后分配它:
class CategoryData(DataSet):
class cat1:
name = 'Category 1'
class cat2:
name = 'Category 2'
CategoryData.cat2.parent = CategoryData.cat1
答案 1 :(得分:1)
你要么: 将其移出定义:
CategoryData.cat2.parent=CategoryData.cat1
或者,如果它是对象属性(而不是类属性):
class cat2:
name = 'Category 2'
def __init__(self):
self.parent = cat1