首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从父类中的另一个子类访问子类

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

Stack Overflow用户
提问于 2010-11-14 01:41:33
回答 2查看 250关注 0票数 1

我真的不知道我应该选择什么标题。不管怎样,我有这样的代码(这是fixtures):

代码语言:javascript
复制
from fixture import DataSet

class CategoryData(DataSet):
    class cat1:
        name = 'Category 1'
    class cat2:
        name = 'Category 2'
        parent = cat1

问题是我不能像这样在cat2中引用cat1:

代码语言:javascript
复制
File "/home/julas/cgp/cgp/datasets/__init__.py", line 11, in cat2
    parent = cat1
NameError: name 'cat1' is not defined

我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-14 02:00:10

这里有两个问题。

首先,Python不会为您做那样的嵌套作用域。要访问CategoryData.cat1,您需要拼写它。

其次,也是一个更大的问题是,无法从那里访问CategoryData:这个类还没有定义,因为您正在定义它。如果您这样做:

代码语言:javascript
复制
class Object(object):
    a = 1
    b = Object.a

它将失败,因为Object的值直到类定义的末尾才会被赋值。你可以认为它是这样发生的:

代码语言:javascript
复制
class _unnamed_class(object):
    a = 1
    b = Object.a
Object = _unnamed_class

没有办法从分配b的位置引用a,因为包含的类还没有分配它的名称。

为了将parent指定为类属性,需要在包含的类实际存在后才能指定它:

代码语言:javascript
复制
class CategoryData(DataSet):
    class cat1:
        name = 'Category 1'
    class cat2:
        name = 'Category 2'
CategoryData.cat2.parent = CategoryData.cat1
票数 3
EN

Stack Overflow用户

发布于 2010-11-14 01:54:40

您可以:将其移出定义:

代码语言:javascript
复制
CategoryData.cat2.parent=CategoryData.cat1

或者,如果它是对象属性(而不是类属性):

代码语言:javascript
复制
class cat2:
    name = 'Category 2'
    def __init__(self):
        self.parent = cat1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4173839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档