2017-08-08 6 views
-2

これが可能かどうかはわかりませんが、私の目標は、列挙子をサブクラスとして使用する基本抽象クラスを作成することです。Python 3.4+を使用して抽象enumサブクラスをインスタンス化および参照する方法は?

これまでのコードと、動作していないコードがあります。どうやら私の "IdealUse"クラスの "class Colors(Enum)"を参照できるようにしたいと思います。何を変更する必要があるかについての考えはありますか?再び

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'?ヒント1: 'Colors'メソッド/属性はありません。ヒント2:[ドキュメント](https://docs.python.org/3/library/abc.html)は、これが予想される動作であることを暗示するものではありません。 – user2864740

+0

"サブクラス"の意味を明確にしていないようですね。 「XはYのサブクラスです」とは、「XはYの一種」を意味し、「YクラスはX属性を持ちません」を意味します。 – user2357112

+0

回答したユーザーのおかげで、私は数時間かけて研究を行い、ドキュメンテーションを見直しました。つまり、投稿する前に休憩を取っていたはずです。本当に、私が何をしているかを記述する方法のより良い見通しを得るために、他の人からのコメントがありました。列挙子を抽象クラスのメンバーにするにはどうすればよいのでしょうか?そして、本当に、それは...何かをクラスのメンバーにすることができますか?言い換えれば、私はそれを全部忘れてしまった。私は答えとして作業コードを掲示しました。多分、分析の麻痺を受ける他の初心者に役立つでしょう。 – mjfjones

答えて

0

は、答えた人に感謝します。私に言葉を再考させるだけで、私が求めていたことは私を実践的な解決策に導いてくれました。に評価されないものを -

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' 
関連する問題