【发布时间】:2021-12-09 07:32:42
【问题描述】:
根据通过 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
【问题讨论】:
-
为什么不只做
self.var2 = self.var1 + "2"和其他人一样?还有,你为什么要从__init___返回self? -
您可以使用字典来列出每个可能的
var1的所有值。 -
您可以创建 Example、FooExample、BarExample 的子类……它们定义了自己的值,并且 if 使用特定方法将返回这些类之一
-
@ddejohn 我猜这些是示例,而不是文字值,因此串联不起作用。
-
在这种情况下,我建议提供一个更具代表性的示例,因为很难说出您到底想做什么。可能有更好的方法,但目前很难辨别您的最终目标。
标签: python python-3.x oop