2010-08-25 5 views
1

J'essaie mes mains sur python. J'essaye d'implémenter une classe de chiffrement qui enc/dec. Dans ma classe de chiffrement, je demande à l'utilisateur de passer 3 arguments pour effectuer les opérations enc dec. Jusqu'à présent, je lisais la clé du dossier et faisais les opérations. Maintenant, je veux fournir une fonction de génération de clé aussi. Mais le problème est que pour appeler générer des clés, je ne veux pas que l'utilisateur fournisse des arguments lors de l'initialisation de la classe.Polymorphisme ou Héritage ou toute autre suggestion?

Donc, ce que j'essaie essentiellement de réaliser, c'est que lorsque la classe crypto est instanciée sans donner d'arguments, je veux juste exposer la fonction generate_key. et quand tous les 3 arguments sont fournis lors de l'instanciation de la classe, je veux exposer toutes les autres fonctions enc/dec mais pas la fonction key gen.

Je ne suis pas en mesure de comprendre est-il une situation de polymorphisme, ou l'héritage ou devrais-je utiliser 2 classes différentes d'un ayant générer des clés et autres pour enc fonctions déc ..

S'il vous plaît me donner quelques suggestions sur la façon dont peuvent je gère cette situation de manière efficace?

Exemple:

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

Alors maintenant, quand cette classe est Crypto instancier sans argument, je veux juste exposer la fonction des clés gen. et si elle est instanciée avec id et val1, alors je veux exposer toutes les fonctions mais pas les clés gen.

J'espère que cela apportera quelques éclaircissements sur ma question. S'il vous plaît me suggérer comment puis-je y parvenir.

Merci, Jon

+0

Je ne suis pas votre question. Pouvez-vous fournir un exemple (pseudo) de code des interfaces que vous expliquez? – strager

Répondre

1

Vous voulez une usine soit héritée ou objets typés canard. Par exemple:

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

Probablement l'un des plus beaux exemples que j'ai vus qui illustre ce point. bien joué. – nialloc

Questions connexes