为什么在使用python fire时总是打印类型信息?

时间:2019-03-22 09:09:55

标签: python command-line-interface python-fire

我在python 2.7.15中有一个简单的测试python-fire cli程序

import fire

class Math:
    def add(x, y):
      """add"""
      return x + y

    def multiply(x, y):
      """multiply"""
      return x * y

if __name__ == '__main__':
  fire.Fire(Math)

如果我写

python-fire-test.py

程序的响应是

Type:        instance
String form: <__main__.Math instance at 0x0000000003CE89C8>

Usage:       python-fire-test.py
             python-fire-test.py add
             python-fire-test.py multiply

但是我不希望看到

Type:        instance
String form: <__main__.Math instance at 0x0000000003CE89C8>

打印在顶部。我可以停止这种行为吗?

2 个答案:

答案 0 :(得分:0)

此行为已由Python Fire v0.2.0中的更干净的输出取代。 使用pip install -U fire升级Fire以获取最新版本。

答案 1 :(得分:0)

您的代码中有两个问题。关于您为什么真正获得所看到的结果的更直接的原因是由于滥用该库。

实际上,您得到的结果仅仅是fire.Fire(Math)的结果,它是从fire.Fire(Math)得到的实例对象的表示。

您的利用率实际上应该是这样的:

(venv) ➜ python python-fire-test.py multiply 5 5
25
(venv) ➜ python python-fire-test.py add 5 5     
10

但是,您面临的另一个问题现在也无法解决。在您的代码中,您将创建一个名为Math的类。在实例方法(addmultiply)中,由于您没有为实例本身传递必要的显式引用,{{1} }}。因此,您的代码现在应该是:

进口火

self

在自述文件中,您正在使用的利用程序的另一部分显示为:

class Math:
    def add(self, x, y):
      """add"""
      return x + y

    def multiply(self, x, y):
      """multiply"""
      return x * y

if __name__ == '__main__':
  fire.Fire(Math)