2010-08-25 49 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