2017-12-18 346 views
1

我正在使用python 3.6,並想從不同的可能類建立一個子類。類可以從「參數」類繼承嗎? (有條件繼承)

因此,一個玩具的例子是:

class MNISTArchitecture: 
    def __init__(self, inputs): 
     self.input_pl = inputs 
     self.learning_rate = LEARNING_RATE 
     self.batch_size = BATCH_SIZE 
     self.encoder 
     self.decoder 

class CIFARArchitecture: 
    def __init__(self, inputs): 
     self.input_pl = inputs 
     self.learning_rate = LEARNING_RATE 
     self.batch_size = BATCH_SIZE 
     self.encoder 
     self.decoder 

,然後建立能夠從第一結構或第二個繼承類:

class AutoEncoder(Architecture): 
    def __init__(self, input_pl, dataset): 
     super().__init__(input_pl) 
     self.dataset = dataset 
     self.anomalous_label = anomalous_label 
     self.build_graph() 

我想我能做到多類繼承並從所有不同的類(體系結構)構建第二個類,但是我不希望python構建一個巨大的圖(因爲我有兩個以上的體系結構)。

希望很清楚,請告訴我是否需要其他信息。

最好

+1

確實想AutoEncoder'的'所有實例基於條件的一個時間從同一個類繼承,或你想能夠爲每個實例設置父類嗎? –

+0

感謝您的幫助,我想根據更大的主函數中的數據集名稱(mnist,cifar10)參數使用相關體系結構。我想這將是第二個選擇。 – houssamzenati

回答

2

這聽起來像你想要組成而不是繼承。 AutoCoder是架構嗎?它會更好地使AutoCoder具有體系結構。然後你可以選擇如何將它們結合在一起。

我不知道你的問題域也足以讓一個具體的建議,但:

class MNISTArchitecture: 
    # your code... 

class CIFARArchitecture: 
    # your code... 

class AutoEncoder: 
    def __init__(self): 
     if condition: 
      self.arch = MNISTArchitecture() 
     else: 
      self.arch = CIFARArchitecture()