【问题标题】:How to assign an Enum to anj abstract class attribute?如何将枚举分配给 anj 抽象类属性?
【发布时间】:2017-08-08 18:01:30
【问题描述】:

不确定这是否可能,但我的目标是创建一个使用枚举器作为子类的基本抽象类。

这是目前为止的代码以及什么是/不工作。我想以某种方式能够在我的“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)

理想使用.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'

【问题讨论】:

  • self.Colors - 这意味着什么?提示 1:没有“颜色”方法/属性。提示 2:the documentation 没有暗示这是预期的行为。
  • 听起来您可能不清楚“子类”的含义。 “X 是 Y 的子类”是指“X 是 Y 的一种”,而不是“Y 类具有 X 属性”。
  • 感谢回复的用户,我花了几个小时研究和查看文档。这意味着我可能应该在发帖前休息一下。真的,从其他人那里得到了一个更好的视角来描述我在做什么。我认为也许正确的问题和恰当的术语是——如何使枚举器成为抽象类的成员?真的,它可能是......如何让任何东西成为一个班级的成员?换句话说,我想得太多了。我发布了工作代码作为答案。也许它会帮助其他分析瘫痪的初学者。

标签: python enums abstract-class subclass


【解决方案1】:

再次感谢回复的人。只是让我重新考虑条款和我的要求,让我找到了一个可行的解决方案。

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

理想使用.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.color_list(1)  # now it returns blue!

    def get_a(self):
        return 'working'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2011-10-10
    • 2014-09-20
    • 2020-08-16
    • 2018-10-21
    • 1970-01-01
    • 2019-02-01
    相关资源
    最近更新 更多