2017-09-16 98 views
0

我想寫一個數據生成器,我想從Keras繼承ImageDataGenerator對象。其目的是使用一些Keras模塊的圖像預處理能力,在我自己的發電機Python Keras ImageDataGenerator:AttributeError:'超'對象沒有'init'屬性

from keras.preprocessing.image import ImageDataGenerator 

不幸的是我仍然在試圖瞭解超類是如何工作的,並繼承的東西,所以我有一個硬實時調試我的代碼。

from keras.preprocessing.image import ImageDataGenerator 

class dataGenerator(ImageDataGenerator): 
    """ 
    A data generator object that flows data from selected source. 
    Initializes with parameters from Keras ImageDataGenerator. 
    """ 
    def __init__(self, *args, **kwargs): 
     super(dataGenerator, self).init(*args, **kwargs) 
     self.iterator=None 

當我試圖創建一個對象,我得到以下錯誤:

d = dataGenerator() 

Traceback (most recent call last): 

    File "<ipython-input-10-44bd98315a72>", line 1, in <module> 
    d = dataGenerator() 

    File "C:/Users/joshu/Documents/Code/Self Driving Car/data_utils.py", line 152, in __init__ 
    super(dataGenerator, self).init(*args, **kwargs) 

AttributeError: 'super' object has no attribute 'init' 

我從mratsim在GitHub上引用的代碼示例:

[1] https://github.com/mratsim/Amazon_Forest_Computer_Vision/blob/master/src/k_dataloader.py

他繼承了同一個對象。我猜它對他有效..

回答

1

__init__方法必須有4個下劃線,就像你在def部分做的一樣。

這是一個Python模式,父類也遵循這樣的:

super(dataGenerator,self).__init__(...) 

題外話:經常,類名以大寫字母開頭,從普通的價值增值經銷商來區分它們。因此,DataGenerator將是該建議之後的更好名稱。

+0

啊我是個白癡,我不能相信我沒有看到這一點。謝謝!好的建議,我會用這個命名。 –

-1
from keras.preprocessing.image import ImageDataGenerator 

class dataGenerator(ImageDataGenerator): 
    """ 
    A data generator object that flows data from selected source. 
    Initializes with parameters from Keras ImageDataGenerator. 
    """ 
    def __init__(self, *args, **kwargs): 
     ImageDataGenerator.__init__(self,*args, **kwargs) 
     self.iterator=None 

超()在python 3.x的工作.Probably你正在使用Python 2.x的

+0

super()也用於python 2(儘管python 3支持較少的詳細版本)。 https://docs.python.org/2/library/functions.html#super vs https://docs.python.org/3/library/functions.html#super –

+0

哦thanx,前幾天我遇到了同樣的問題問題,我搜索了很多關於超級,但我無法找到它。所以我來到以上版本 –

+0

我應該編輯或刪除我的答案? –

相關問題