从父类中的另一个子类访问子类

时间:2010-11-13 17:41:33

标签: python pylons

我真的不知道我应该选择什么标题。无论如何,我有这样的代码(这是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

我该怎么做?

2 个答案:

答案 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