将枚举类型作为构造函数参数传递

时间:2018-01-18 19:31:16

标签: python enums constructor

我是python的新手,我想在函数中将枚举作为参数传递给构造函数。

编辑:我正在开发一个程序,该程序必须组织不同类型的数据,但大多数这些数据类型都可以用同样的方式处理。这些数据不会全部同时或以可预见的顺序添加。因此,我希望保留相同的功能,只需更改构造函数存储数据的方式。让我们考虑一下这个更简单的例子:

说我有一个枚举

from enum import Enum, auto

class HouseThing(Enum):
    people = auto()
    pets = auto()
    furniture = auto()

我有一个可以包含部分或全部内容的课堂

class House():

    def __init__(self, address, people = None, pets = None, 
        furniture = None):
        self.address = address, 
        if self.people is not None:
            self.people = people

        etc....

现在我想拥有一个可以制作新装修房屋的功能,但我想使用一个可用于任何房屋的功能:

house_things = HouseThing.furniture

def make_house_with_some_house_things(neighborhood, house_things):
     neighborhood.append(House(house_things.name = house_things.name))

有没有办法在没有先测试什么样的HouseThing house_things的情况下才能做到这一点? house_things.name传递一个字符串,但我希望它能够将它用作关键字。

1 个答案:

答案 0 :(得分:2)

我不确定你在这里想要达到的目的,但是为了解决这个难题:

首先,更改House以确定传递的内容:

class House():

    def __init__(self, address, *house_things):
        self.address = address
        for ht in house_things:
            if ht is HouseThings.people:
                self.people = ht
            elif ht is HouseThings.pets:
                self.pets = ht
            elif ht is HouseThings.furniture:
                self.furniture = ht
            else:
                raise ValueError('unknown house thing: %r' % (ht, ))

然后,将make_house_with_some_house_things更改为只传递给它的房子:

def make_house_with_some_house_things(neighborhood, house_things):
     neighborhood.append(House(house_things))