将属性两种方式映射到类

时间:2016-01-07 15:53:58

标签: python oop

我有两个班级,LowerHigher1。当我调用parse实例的Lower方法时,它会检查它代表哪种更高级别,在我的示例中,我只显示Higher1。然后它创建这个更高级的实例并返回它。我可以通过调用Lower方法将更高级别的实例转换回build的实例。

class Lower:

    def __init__(self, data):
        self.data = data

    def parse(self):
        if self.data[0] == "a":
            value = self.data[1:]
            return Higher(value)
        else:
            ...


class Higher1:

    def __init__(self, value):
        self.value = value

    def build(self):
        return Lower("a" + self.value)

到目前为止一切顺利,现在我想为value的{​​{1}}属性的每个可能值创建类。假设Higher1"green"是可能的值,则有两个额外的类称为"blue"Higher1Green

Higher1Blue将评估为Higher1("blue")

的实例

Higher1Blue将评估Higher1("blue").build()的实例,其属性为Lower beeing data

我的问题是,这是否可行,只需指定例如"ablue"blue之间的映射,而不是代码中的多个位置。我不关心类Higher1BlueHigher1Blue是动态生成还是使用Higher1Green定义。

我的第一种方法是覆盖class的{​​{1}}方法,以便能够返回__new__Higher1的实例。但我找不到一种方法来进行向后映射(Higher1Blue),而无需再次指定映射。

1 个答案:

答案 0 :(得分:0)

使用以下链接,我能够实现我想要的目标:

Reverse mapping class attributes to classes in Python

我不想投票给重复,因为它不是完全相同的问题而且需要很长时间等待50票,所以人们可以花时间寻找解决方案,而我已经有了。