python - 类中的 Python 条件语句
问题描述
根据通过 cli 参数传入的输入,实现更改类属性的最佳方法是什么?
我写的东西非常好,但是感觉过于凌乱和糟糕的设计。有没有更好的方法来解决这个问题?
下面的例子有四个不同的输入,但是随着这个程序变得越来越大,这将变得非常混乱。
这是一些简短的示例代码;
class Example(object):
def __init__(self, var1):
self.var1 = var1
self.var2 = None
self.var3 = None
self.var4 = None
if var1 == 'foo':
self.var2 = 'foo2'
self.var3 = 'foo3'
self.var4 = 'foo4'
elif var1 == 'bar':
self.var2 = 'bar2'
self.var3 = 'bar3'
self.var4 = 'bar4'
elif var1 == 'foobar':
self.var2 = 'foobar2'
self.var3 = 'foobar3'
self.var4 = 'foobar4'
elif var1 == 'barfoo':
self.var2 = 'barfoo2'
self.var3 = 'barfoo3'
self.var4 = 'barfoo4'
def main()
parser = argparse.ArgumentParser()
parser.add_argument('input')
args = parser.parse_args()
example = Example(args.input)
print(example.var2) # returns 'foo2'
带参数调用的示例;
python main.py foo
解决方案
正如评论中所建议的,有很多方法可以清理它。对于你的例子的大小和规模,我会做这样的事情:
class Example:
_DEPENDENT_VALS = {
'foo': ('foo2', 'foo3', 'foo4'),
'bar': ('bar2', 'bar3', 'bar4'),
'foobar': ('foobar2', 'foobar3', 'foobar4'),
'barfoo': ('barfoo2', 'barfoo3', 'barfoo4')
}
def __init__(self, var1):
self.var1 = var1
self.var2 = None
self.var3 = None
self.var4 = None
if var1 in Example._DEPENDENT_VALS:
self.var2, self.var3, self.var4 = Example._DEPENDENT_VALS[var1]
根据您设置的值的数量和类型,此方法可能并不总是合适的,但它是一种方法。
推荐阅读
- php - 重复记录(错误 1062)
- javascript - 茉莉花角度测试 - 是否可以在描述方法上添加属性?
- gnuplot - 样本、等值样本以及它们如何影响等高线
- git - 无法访问“https://github.com/GladysProject/gladys/”:无法连接到 github.com 端口 443:没有路由到主机
- php - 向 Symfony BaseModel 添加属性
- database-design - 维度数据建模中的注释、注释
- lightbox2 - 使用 Lightbox 2 时出现导航按钮问题
- javascript - 通过条件动态更改 div 中的图像
- python - 如何检查列表中的范围是否相同?
- java - Spring Boot 中的电子邮件