繁体   English   中英

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

[英]Why do I always get type info printed when using 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>

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

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

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

实际上,您得到的结果仅仅是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 )中,您尝试使用它时会遇到问题,因为您没有为实例本身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)

在正在使用的lib的README文件中进一步显示如下:

python calculator.py double 10  # 20
python calculator.py double --number=15  # 30

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM