2014-12-02 232 views
0

我正在努力与我的代码,特别是子类。我有一个父类,它在初始化时会调用它的子类作为一个属性,以对象列表的形式。我看过很多帖子,一个人忘记打电话给父母的__init__()。我的问题不同,因为父母正在调用孩子班,我不想打电话给他。Python子类不识别继承父类

我收到以下错误:

NameError: name 'bundle' is not defined 

我很困惑,因为它被明确定义为父类。有任何想法吗?

class bundle(object): 
"""Main object to hold graphical information""" 
    def __init__(self, size,nzone): 
     self.size = size 
     self.rows = math.sqrt(size) 
     self.cols = math.sqrt(size) 
     subchans = [] 
     r = 1 
     c = 1 
     for i in range (1,self.size): 
      subchans.append(bundle.subbundle(r,c,self.rows,self.cols)) 
      r += 1    
      if r > self.rows : 
       r = 1 
       c += 1 
    class subbundle(bundle): 
     """ Defines geometry to represent subbundle""" 
     def __init__(self, row, col, rows,cols): 
+0

名字'bundle'直到*类定义完成后才定义,所以'subbundle'不能从它继承*和*是一个嵌套类。这个例子并不清楚你为什么要'subbundle'被继承或嵌套。 – jonrsharpe 2014-12-02 16:45:16

+0

您不能从“捆绑”方法调用任何“子捆绑”方法。这是另一种方式:“子捆绑”可能会调用“捆绑”方法。子类化是为了专门化对象,而不是引起孩子 – 2014-12-02 16:46:14

+0

,因为你正在做嵌套在另一个类里面的类,它不知道'bundle'是什么,我想它应该是'subbundle(self)'而不是。但你可能真正想要的是让'subbundle(bundle)'它自己的类,不嵌套 – TehTris 2014-12-02 16:46:21

回答

1

当我运行你的代码,我有以下行错误:

class subbundle(bundle): 

那是因为你正试图继承您从bundlesubundle类。我不知道这是你真正想要做什么。我们假设它是。

当Python试图解析.py文件时,只要它看到class bundle就会尝试找出类层次结构。当翻译人员到达class subbundle(bundle)时,它还不知道(还)bundle是什么。它移动到相同的水平比你class bundle

class bundle(object): 
    def __init__(self, size,nzone): 
     self.size = size 
     [ . . .] 

class subbundle(bundle): 
    """ Defines geometry to represent subbundle""" 
    def __init__(self, row, col, rows,cols): 
     [ . . . ] 

你不会再看到您的当前错误,并会开始看到一个新问题:type object 'bundle' has no attribute 'subbundle'这是因为它试图把bundle.subbundleclass bundle的方法,这是不。您可能要更改bundle.__init__的代码:

for i in range (1,self.size): 
    subbundle_instance = subbundle(r, c, self.rows, self.cols) 
    subchans.append(subbundle_instance) 

PS:这通常是一个很好的做法以大写字母命名你的类(又名驼峰)查看https://www.python.org/dev/peps/pep-0008#class-names

+0

编辑以尝试防止未来的错误 – BorrajaX 2014-12-02 16:55:44