Полиморфизм или Наследование или любое другое предложение? - PullRequest
1 голос
/ 25 августа 2010

Я пробую свои силы на питоне. Я пытаюсь реализовать класс шифрования, который делает Enc / Dec. В моем классе шифрования я требую, чтобы пользователь передал 3 аргумента для выполнения операций enc dec. До сих пор я читал ключ из файла и делал операции. Теперь я хочу также предоставить функцию генерации ключа. Но проблема в том, что для вызова генерации ключей я не хочу, чтобы пользователь предоставлял какие-либо аргументы при инициализации класса.

Итак, по сути, я пытаюсь достичь того, что когда создается экземпляр класса crypto без каких-либо аргументов, я просто хочу представить функцию generate_key. и когда все 3 аргумента предоставлены при создании экземпляра класса, я хочу показать все другие функции 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 keys. и если он создается с помощью id и val1, то я хочу показать все функции, но не ключи gen.

Я надеюсь, что это даст некоторые разъяснения по моему вопросу. Пожалуйста, подскажите, как мне этого добиться.

Спасибо, Джон

1 Ответ

1 голос
/ 25 августа 2010

Вы хотите фабрику с унаследованными или типизированными объектами. Например:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...