2017-08-08 1 views
-2

Je ne sais pas si c'est même possible, mais mon but est de créer une classe abstraite de base qui utilise un énumérateur en tant que sous-classe.Comment instancier et référencer une sous-classe enum abstraite en utilisant Python 3.4+?

Voici le code jusqu'à présent et ce qui fonctionne/ne fonctionne pas. J'aimerais pouvoir référencer la "classe Colors (Enum)" dans ma classe "IdealUse". Des pensées sur ce qui doit être changé?

BaseClass.py

from abc import ABCMeta, abstractmethod 
from enum import Enum 


class Base(metaclass=ABCMeta): 

    default_color = 'yellow' 

    @abstractmethod 
    def get_a(self): 
     pass 

class Colors(Enum): 
    blue = 1 
    green = 2 
    red = 3 

Base.register(Colors) 

IdealUse.py

from abstractbase import Base 

class IdealUse(Base): 

    def __init__(self): 
     self.value_of_a = self.get_a() # this works 
     self.ideal_color = self.default_color # this works 
     self.color_of_sky = self.Colors(1) # does not work 

    def get_a(self): 
     return 'working' 
+0

'self.Colors' - qu'est-ce que l'évaluation à? Astuce 1: il n'y a pas de méthode/attribut 'Couleurs'. Astuce 2: [la documentation] (https://docs.python.org/3/library/abc.html) ne fait aucune allusion à ce comportement attendu. – user2864740

+0

Il semble que vous ne sachiez pas clairement ce que signifie "sous-classe". "X est une sous-classe de Y" signifie "X est une sorte de Y" et non "la classe Y a un attribut X". – user2357112

+0

Grâce aux utilisateurs qui m'ont répondu, j'ai passé quelques heures à faire des recherches et à revoir la documentation. Ce qui veut dire que j'aurais probablement dû faire une pause avant de poster. Vraiment, il a fallu des commentaires d'autres pour avoir une meilleure perspective de comment décrire ce que je fais. Je pense que peut-être la bonne question et les bons termes seraient - comment faire d'un recenseur un membre d'une classe abstraite? Et vraiment, ça pourrait être ... comment faire quoi que ce soit en tant que membre d'une classe? En d'autres termes, je pensais à tout. J'ai posté le code de travail comme réponse. Peut-être que cela aidera d'autres débutants qui ont une paralysie de l'analyse. – mjfjones

Répondre

0

Encore une fois, merci à ceux qui ont répondu. Le simple fait de repenser les termes et ce que je demandais m'a conduit à une solution de travail.

BaseClass.py

from abc import ABCMeta, abstractmethod 
from enum import Enum 

class Colors(Enum): 
    blue = 1 
    green = 2 
    red = 3 


class Base(metaclass=ABCMeta): 

    default_color = 'yellow' 
    color_list = Colors 

    @abstractmethod 
    def get_a(self): 
     pass 

IdealUse.py

from abstractbase import Base 

class IdealUse(Base): 

    def __init__(self): 
     self.value_of_a = self.get_a() # this works 
     self.ideal_color = self.default_color # this works 
     self.color_of_sky = self.Colors(1) # now it returns blue! 

    def get_a(self): 
     return 'working'