我真的不知道我应该选择什么标题。不管怎样,我有这样的代码(这是fixtures):
from fixture import DataSet
class CategoryData(DataSet):
class cat1:
name = 'Category 1'
class cat2:
name = 'Category 2'
parent = cat1问题是我不能像这样在cat2中引用cat1:
File "/home/julas/cgp/cgp/datasets/__init__.py", line 11, in cat2
parent = cat1
NameError: name 'cat1' is not defined我该怎么做呢?
发布于 2010-11-14 02:00:10
这里有两个问题。
首先,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没有办法从分配b的位置引用a,因为包含的类还没有分配它的名称。
为了将parent指定为类属性,需要在包含的类实际存在后才能指定它:
class CategoryData(DataSet):
class cat1:
name = 'Category 1'
class cat2:
name = 'Category 2'
CategoryData.cat2.parent = CategoryData.cat1发布于 2010-11-14 01:54:40
您可以:将其移出定义:
CategoryData.cat2.parent=CategoryData.cat1或者,如果它是对象属性(而不是类属性):
class cat2:
name = 'Category 2'
def __init__(self):
self.parent = cat1https://stackoverflow.com/questions/4173839
复制相似问题