2014-12-02 194 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