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