1. 不带初始化参数的类
其实 Fire 可以接收一切 Python 对象,那我们使用一个类来看下具体使用方法:
import firefrom typing import Textclass Calculator(object):"""A simple calculator class."""@staticmethoddef double(number: int) -> int:"""将给定数值乘以 2 后返回:param number: 数值:return: int"""return 2 * numberif __name__ == '__main__':fire.Fire(Calculator)
也可以将类实例化之后,传给 Fire:
calculator = Calculator()fire.Fire(calculator)
在终端中使用如下命令进行操作:
$ python calculator.py double 1020$ python calculator.py double --number=1530
2. 带有初始化参数的类
如果我们的类带有初始化参数,那么我们如何调用类方法,以及如何传递参数初始值给了类:
import fireclass BrokenCalculator(object):def __init__(self, offset: int = 1):self._offset = offsetdef add(self, x: int, y: int) -> int:return x + y + self._offsetdef multiply(self, x: int, y: int) -> int:return x * y + self._offsetif __name__ == '__main__':fire.Fire(BrokenCalculator)
这里的BrokenCalculator类有一个初始化offset变量(默认为 1),我们采用如下方式来进行传参:
$ python example.py multiply 10 20 --offset=0200
如果类的初始化参数变量名与函数变量名一致的,在命令行中调用需要采用如下方式(当然,最好的方式还是不一样)。:
import fireclass BrokenCalculator(object):def __init__(self, x: int = 1):self._offset = xdef add(self, x: int, y: int) -> int:return x + y + self._offsetdef multiply(self, x: int, y: int) -> int:return x * y + self._offsetif __name__ == '__main__':fire.Fire(BrokenCalculator)
在终端中正确的调用方式:
$ python helloFire.py add 10 20 --x=535$ python helloFire.py add 10 --y=20 --x=535$ python helloFire.py add --x=10 --y=20 --x=5 # 这种方式是错误的
再来看一下示例,帮助我们理解:
import fireclass Building(object):def __init__(self, name, stories=1):self.name = nameself.stories = storiesdef climb_stairs(self, stairs_per_story=10):for story in range(self.stories):for stair in range(1, stairs_per_story):yield stairyield 'Phew!'yield 'Done!'if __name__ == '__main__':fire.Fire(Building)
可采用如下方式调用类方法:
$ python example.py --name="Sherrerd Hall" --stories=3 climb_stairs 10$ python example.py --name="Sherrerd Hall" climb_stairs --stairs_per_story=10$ python example.py --name="Sherrerd Hall" climb_stairs --stairs-per-story 10$ python example.py climb-stairs --stairs-per-story 10 --name="Sherrerd Hall"
3. 获取属性值
在命令行中,也可以直接获取属性值:
import fireclass Property(object):def __init__(self, p: int = 1):self.p = pself.add()def add(self):for i in range(10):self.p += iif __name__ == '__main__':fire.Fire(Property)
获取类属性值示例如下:
$ python helloFire.py p46$ python helloFire.py --p=5 p51
