2016-07-26 88 views
0

我正在使用fits文件,我使用fits.open()從astropy庫中讀取。我得到一個hdu(頭部數據單元),它是astropy.io.fits.hdu.image.PrimaryHDU的一個實例。初始化具有母類屬性的實例

現在,對於一個特定的項目,我想通過編寫特定的方法來處理這個hdu中的數據。我認爲這樣做的好方法是編寫我自己的類,它將成爲PrimaryHDU的一個子類。我的新對象將擁有PrimaryHDU實例的所有屬性和方法,以及我將編寫的屬性和方法。但我無法讓它正常工作。我的新對象如何獲取父對象的所有屬性和方法?我是來最接近的是下面這段代碼(有,例如,一個新的方法調用「減」):

from astropy.io.fits.hdu.image import PrimaryHDU 

class MyHDU(PrimaryHDU): 

    def __init__(self, hdu): 
     PrimaryHDU.__init__(self, data=hdu.data, header=hdu.header) 

    def subtract(self, val): 
     self.data = self.data - val 

這是一種好,但我可以看到我的新對象沒有按沒有將所有的屬性設置爲與原始對象(hdu)相同的值......這看起來很正常,當我實際上查看我的代碼時......但是如何初始化我的新對象,其中包含父對象?我是否正確地讓我的新類繼承自PrimaryHDU類? 謝謝

+1

你使用Python 2或3? – DeepSpace

回答

0

如何初始化我的新對象與父對象的所有屬性?

你不行。你不從一個實例(即對象)繼承,你從一個類繼承。

你應該做的是傳遞你需要的所有參數,以便初始化父類和子類。在子類的__init__方法調用super().__init__(父類的方法__init__),然後初始化子類的其餘部分:

from astropy.io.fits.hdu.image import PrimaryHDU 

class MyHDU(PrimaryHDU): 

    def __init__(self, args_to_init_PrimaryHDU_obj, hdu): 
     super().__init__(args_to_init_PrimaryHDU_obj) 
     # if using Python 2 the above line should be 
     # super(PrimaryHDU, self).__init__(args_to_init_PrimaryHDU_obj) 
     self.data = hdu.data 
     self.header = hdu.header 

    def subtract(self, val): 
     self.data = self.data - val 
+0

當然,好的,這是有道理的。我確實把物體和班級混淆了。謝謝。但是:super(PrimaryHDU,self).__ init __(args_to_init_PrimaryHDU_obj)不同於:PrimaryHDU .__ init __(args_to_init_PrimaryHDU_obj)? – samR

+0

@samR它取決於你使用的Python版本,如果使用Python 2,它取決於'PrimaryHDU'是否是舊式或新式類。 – DeepSpace