首页 > 解决方案 > 类中的 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

标签: pythonpython-3.xoop

解决方案


正如评论中所建议的,有很多方法可以清理它。对于你的例子的大小和规模,我会做这样的事情:

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]

根据您设置的值的数量和类型,此方法可能并不总是合适的,但它是一种方法。


推荐阅读