多态性或继承或任何其他建议?

时间:2010-08-25 05:02:54

标签: python oop

我在python上尝试。我正在尝试实现一个加密类,它执行enc / dec。在我的加密类中,我要求用户传递3个args来执行enc dec操作。直到现在我正在从文件中读取密钥并进行操作。现在我想提供一个生成键功能。但问题是调用生成密钥我不希望用户在启动类时提供任何参数。

所以基本上我想要实现的是,当crypto类被实例化而没有给出任何参数时,我只想暴露generate_key函数。当实例化类时提供所有3个args时,我想暴露所有其他的enc / dec函数但不暴露key gen函数。

我无法理解它是多态性情况还是继承,或者我应该只使用2个不同的类,其中一个生成密钥,其他类用于enc dec函数。

请给我一些关于如何有效处理这种情况的建议?

示例:

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"""

所以现在,当这个加密类实例化时没有参数时,我只想公开gen键函数。如果用id和val1实例化,那么我想公开所有函数,但不要公开gen键。

我希望这会对我的问题提供一些澄清。请建议我如何实现这一目标。

谢谢, 乔恩

1 个答案:

答案 0 :(得分: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)