2010-08-25 68 views
1

我想對蟒蛇我的手。我試圖實現一個加密類,它確實enc/dec。在我的加密類中,我要求用戶傳遞3個參數來執行加密操作。直到現在,我正在從文件中讀取密鑰並執行操作。現在我想提供一個生成鍵功能。但問題是,調用生成鍵我不希望用戶在啓動類時提供任何參數。多態性或繼承或任何其他建議?

那麼基本上我想實現的是,當加密類沒有提供任何參數實例化,我只是想揭露generate_key功能。當實例化類時提供了所有3個參數時,我想公開所有其他enc/dec函數,但不提供關鍵gen函數。

我無法理解它是一個多態的情況下,或繼承或者我應該只使用2個不同類別的一個具有生成ENC十二月功能鍵等..

請大家給我的一些建議,如何能我有效地處理這種情況?

例子:

class crypto: 
    def __init__(self,id, val1): 
     self._id = id 
     self._val1 = val1 

    def encrypt(self): 
     """ encryption here """ 


    def save(self): 
     """ save to file """ 

    def load(self): 
     """ load from file""" 

    def decrypt(self): 
     """ decryption here""" 

    def gen_keys(self): 
     """ gen key here""" 

所以現在,當這個加密類不帶參數的實例,我只是想揭露根鍵的功能。如果它用id和val1實例化,那麼我想公開所有的函數,但不是gen鍵。

我希望這將提供一些澄清我的問題。請建議我如何實現這一點。

感謝, 喬恩

+0

我不會按照你的問題。你能提供你正在解釋的接口的(僞)代碼示例嗎? – strager 2010-08-25 05:06:40

回答

1

您是否希望無論是繼承或鴨類型對象的工廠。例如:

class CryptoBasic(object): 

    def __init__(self, *args): 
     """Do what you need to do.""" 

    def basic_method(self, *args): 
     """Do some basic method.""" 

class CryptoExtended(CryptoBasic): 

    def __init__(self, *args): 
     """Do what you need to do.""" 

    def extended_method(self, *args): 
     """Do more.""" 

# This is the factory method 
def create_crypto(req_arg, opt_arg=None): 
    if opt_arg: 
     return CryptoExtended(req_arg, opt_arg) 
    else: 
     return CryptoBasic(req_arg) 
+0

也許我見過的最完整的例子就是這個例子。做得好。 – nialloc 2013-09-20 10:31:19