python - 无需 elseif 即可设置类变量的优雅方法
问题描述
我是python新手,所以如果有明显的解决方案,我很抱歉。我正在研究一些看起来像这样的代码(总共 80 个条目):
class variable():
number = ""
def __init__(self, number):
self.no = number
self.longname = "Long variable name"
self.name = "Variable"
self.tag = "tag"
self.unit = "unit"
def get_varname(self):
if self.no == 1:
self.name = 'Second'
self.unit = '[s]'
elif self.no == 2:
self.name = 'Metre'
self.unit = '[m]'
elif self.no == 3:
self.name = 'Kilogram'
self.tag = 'kg'
self.unit = '[kg]'
elif self.no == 4:
self.name = 'Ampere'
self.tag = 'Amp'
self.unit = '[A]'
有什么优雅的方法来重写它吗?我想一种方法是使用字典,但我不确定这是否会使代码更容易。也只有一些条目包含“标签”。
解决方案
使用字典
就像@deceze 所说,使用 dict 将数字映射到元组是一种方法。你可以做的是像这样设置元组("Name", "unit", "tag - optional")
:然后,您可以获取元组的大小以查看它是否有标签。所以,字典看起来像:
class variable():
def __init__(self, number):
self.no = number
self.longname = "Long variable name"
self.name = "Variable"
self.tag = "tag"
self.unit = "unit"
self.map = {1: ('Second','[s]'), 2: ('Metre', '[m]'),
3: ('Kilogram', '[kg]', 'kg'), 4: ('Ampere', '[A]', 'Amp')}
def get_varname(self):
selfTuple = self.map[self.no]
self.name = selfTuple[0]
self.unit = selfTuple[1]
if (len(selfTuple)==3):
self.tag = selfTuple[2]
在 3.10 中使用匹配大小写
在 Python 3.10 中,您可以使用称为 match case 的特殊语句。它类似于 Java 中的 switch 语句。
class variable():
def __init__(self, number):
self.no = number
self.longname = "Long variable name"
self.name = "Variable"
self.tag = "tag"
self.unit = "unit"
def get_varname(self):
match self.no:
case 1:
self.name = 'Second'
self.unit = '[s]'
case 2:
self.name = 'Metre'
self.unit = '[m]'
case 3:
self.name = 'Kilogram'
self.tag = 'kg'
self.unit = '[kg]'
case 4:
self.name = 'Ampere'
self.tag = 'Amp'
self.unit = '[A]'
推荐阅读
- javascript - 如何从 gtm 中的自定义 javascript 变量中检索不同 JS 文件中的值
- javascript - Javascript,来自 getElementByID 的值的 parseInt() 不起作用
- linux - 使用从 pwd 派生的动态文本编辑终端提示
- excel - 阻止和/或撤消单元格编辑
- esri - ESRI JS Sketch 小部件:如何在特定比例下禁用
- java - grpc java双向流 - 偶尔获取流超时运行时异常
- javascript - 来自 UI 上的 redux 状态的 REACT 渲染数组
- javascript - 那么MongoDB迁移脚本......?
- css - 如何在一个 css 文件中编写两个媒体查询?
- mysql - SQL 中没有条目时返回 0