python - 接受命令并调用方法

标签 python python-3.x

我有一个包含不同方法的类。

现在我希望我的 main() 充当 REPL。我有不同的命令,每个命令都指的是不同的方法。 (例如,命令 1(调用方法 1))

我想打印一个提示>>> 并一次接受一个命令,然后调用该方法

我该怎么做?

    class supermarket(object):
            def __init__(self):
                    pass
            def method1(self):
                    pass
            def method2(self):
                    pass
            ...

    def main():

顺便说一下,我使用的是 python 3.5

最佳答案

您可以使用 getattr() 函数按名称获取属性,然后调用生成的方法对象:

def main():
    s = supermarket()
    while 1:
        cmd = input('>>> ')  # or raw_input('>>> ') if using Python < 3
        if cmd in ('q', 'quit'):
            break
        print(getattr(s, cmd)())

如果方法名称与命令不同,您将需要某种方式进行翻译(这样就无需使用 getattr):

def main():
    s = supermarket()
    while 1:
        cmd = input('>>> ')
        if cmd in ('q', 'quit'):
            break
        print({
            'command1': s.method1,
            'command2': s.method2,
            # ...
        }[cmd]())

关于python - 接受命令并调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519694/

相关文章:

python - 使用 scipy 构建 wav 文件并将其写入磁盘

python - MacVim 未加载 ftplugins

python-3.x - 如何在 pandas group by/nlargest 计算中获取其他列名称信息?

python - PyMODINIT_FUNC 和 PyModule_Create 之间的区别

python - 线串地理 Pandas 之间的距离

python - numpy.fft 和 scipy.fftpack 有什么区别?

python - Pandas 在 groupby 之后获取行

Ubuntu中的Python导入模块和文件

python - 获取 Pandas 数据框中的最大连续空行

python-3.x - 更改 netCDF 文件的网格大小