Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在查找只能保存特定值的数据类型_Python_List_Switch Statement_Selection - Fatal编程技术网

Python 正在查找只能保存特定值的数据类型

Python 正在查找只能保存特定值的数据类型,python,list,switch-statement,selection,Python,List,Switch Statement,Selection,我最近又开始使用Python,我正在尝试编写一个模块,其中出现了许多以下类型的问题: 对象问题可以容纳变量单元。单位只能是“英寸”、“毫米”或“米” 这个模块应该被其他人使用,所以我想要最容易使用的解决方案。如果可能,我希望用户在尝试分配除其中一个值以外的任何值时收到错误 我发现这在我定义继承到子类的unitClass类的incheclass、mmeterclass和metersClass的对象中是可能的。然后,我将为每个变量创建一个实例,用户可以将其分配给所讨论的变量。但我认为这可能令人困惑,

我最近又开始使用Python,我正在尝试编写一个模块,其中出现了许多以下类型的问题:

对象
问题
可以容纳变量
单元
。单位只能是“英寸”、“毫米”或“米”

这个模块应该被其他人使用,所以我想要最容易使用的解决方案。如果可能,我希望用户在尝试分配除其中一个值以外的任何值时收到错误

我发现这在我定义继承到子类的
unitClass
类的
incheclass
mmeterclass
metersClass
的对象中是可能的。然后,我将为每个变量创建一个实例,用户可以将其分配给所讨论的变量。但我认为这可能令人困惑,除非这是解决此类问题的标准方法

我提出的另一个解决方案是set方法,但由于我不将它们用于其他变量,因此我希望在这种情况下尽可能避免使用它们

是否有其他方法可以仅使用标准python安装提供的模块来实现这一点

问候,

RTT在其他语言(即java)中,这种结构称为枚举。特别是因为你列举了一些可能的值

在python 3中,您可以导入enum并像这样使用它:

from enum import Enum

class Color(Enum):

    red = 1
    green = 2
    blue = 3
这里有一个更深入的帖子:

如果您想要一个如何将其扩展到您的特定案例的示例,我会这样做,创建一个单元枚举:

class Unit(Enum):
    inches, millimeters, meters = range(3)

class Problem(object):

    def __init__(self, units):
        self.unit = getattr(Unit(), units) 

如果我理解正确,您希望在没有usimgna setter函数的情况下限制对象属性的可能值。在Python中,可以使用行为类似于常规属性的getter/setter。你可以做:

class Problem(object):
    @property
    def unit(self):
        return self._unit

    @unit.setter
    def unit(self, val):
        if val in ["inches", "millimeters", "meters"]:
            self._unit = val

我更改了
Unit
,因为不是单例类型的变量通常不应该以大写开头。

我们使用的是python 3还是python不是3?我想让它与2.7兼容,但优先级不高。我没有足够的声誉来提升投票率,但这也很有帮助。谢谢。我想补充一点,
enum
仅在Python 3.4中添加,在大多数生产环境中几乎不可用。@Cu3PO42从futureGood point导入。我总是自己实现它,因为这真的不难做到。。。