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

3

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

编辑:我正在编写一个程序,其中一个类必须组织不同类型的数据,但是大多数这些数据类型可以以相同的方式处理。这些数据不会同时或以可预见的顺序添加。因此,我希望保持相同的功能,并仅更改构造函数存储数据的方式。让我们考虑这个更简单的例子:

假设我有一个枚举

from enum import Enum, auto

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

我有一个名为House的类,可以包含其中一些或所有这些内容。

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))

有没有一种方法可以不先测试house_things是什么类型来完成这个操作?house_things.name返回一个字符串,但我希望它能够被用作关键字。

1个回答

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))

我编辑了我的问题以提供更多的上下文,同时我还提出了对你的答案的修改建议,因为在你的例子中people不再是构造函数的参数。谢谢! - Dimitri Coukos
@DimitriCoukos:谢谢,我忘记删除那些行了。需要注意的一点是:你没有错误保护——如果你有一所不允许宠物的房子,而传入了 HouseThings.pets …… 那么这所房子现在就有宠物了。 - Ethan Furman
啊,是的,幸运的是,我的类最终应该拥有所有的数据类型。 - Dimitri Coukos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接