我在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键。
我希望这会对我的问题提供一些澄清。请建议我如何实现这一目标。
谢谢, 乔恩
答案 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)