Fire-类对象-《Python教程》

admin 2025-10-20 00:46:25 编程 来源:ZONE.CI 全球网 0 阅读模式

1. 不带初始化参数的类

其实 Fire 可以接收一切 Python 对象,那我们使用一个类来看下具体使用方法:

  1. import fire
  2. from typing import Text
  3. class Calculator(object):
  4. """A simple calculator class."""
  5. @staticmethod
  6. def double(number: int) -> int:
  7. """将给定数值乘以 2 后返回
  8. :param number: 数值
  9. :return: int
  10. """
  11. return 2 * number
  12. if __name__ == '__main__':
  13. fire.Fire(Calculator)

也可以将类实例化之后,传给 Fire:

  1. calculator = Calculator()
  2. fire.Fire(calculator)

在终端中使用如下命令进行操作:

  1. $ python calculator.py double 10
  2. 20
  3. $ python calculator.py double --number=15
  4. 30

2. 带有初始化参数的类

如果我们的类带有初始化参数,那么我们如何调用类方法,以及如何传递参数初始值给了类:

  1. import fire
  2. class BrokenCalculator(object):
  3. def __init__(self, offset: int = 1):
  4. self._offset = offset
  5. def add(self, x: int, y: int) -> int:
  6. return x + y + self._offset
  7. def multiply(self, x: int, y: int) -> int:
  8. return x * y + self._offset
  9. if __name__ == '__main__':
  10. fire.Fire(BrokenCalculator)

这里的BrokenCalculator类有一个初始化offset变量(默认为 1),我们采用如下方式来进行传参:

  1. $ python example.py multiply 10 20 --offset=0
  2. 200

如果类的初始化参数变量名与函数变量名一致的,在命令行中调用需要采用如下方式(当然,最好的方式还是不一样)。:

  1. import fire
  2. class BrokenCalculator(object):
  3. def __init__(self, x: int = 1):
  4. self._offset = x
  5. def add(self, x: int, y: int) -> int:
  6. return x + y + self._offset
  7. def multiply(self, x: int, y: int) -> int:
  8. return x * y + self._offset
  9. if __name__ == '__main__':
  10. fire.Fire(BrokenCalculator)

在终端中正确的调用方式:

  1. $ python helloFire.py add 10 20 --x=5
  2. 35
  3. $ python helloFire.py add 10 --y=20 --x=5
  4. 35
  5. $ python helloFire.py add --x=10 --y=20 --x=5 # 这种方式是错误的

再来看一下示例,帮助我们理解:

  1. import fire
  2. class Building(object):
  3. def __init__(self, name, stories=1):
  4. self.name = name
  5. self.stories = stories
  6. def climb_stairs(self, stairs_per_story=10):
  7. for story in range(self.stories):
  8. for stair in range(1, stairs_per_story):
  9. yield stair
  10. yield 'Phew!'
  11. yield 'Done!'
  12. if __name__ == '__main__':
  13. fire.Fire(Building)

可采用如下方式调用类方法:

  1. $ python example.py --name="Sherrerd Hall" --stories=3 climb_stairs 10
  2. $ python example.py --name="Sherrerd Hall" climb_stairs --stairs_per_story=10
  3. $ python example.py --name="Sherrerd Hall" climb_stairs --stairs-per-story 10
  4. $ python example.py climb-stairs --stairs-per-story 10 --name="Sherrerd Hall"

3. 获取属性值

在命令行中,也可以直接获取属性值:

  1. import fire
  2. class Property(object):
  3. def __init__(self, p: int = 1):
  4. self.p = p
  5. self.add()
  6. def add(self):
  7. for i in range(10):
  8. self.p += i
  9. if __name__ == '__main__':
  10. fire.Fire(Property)

获取类属性值示例如下:

  1. $ python helloFire.py p
  2. 46
  3. $ python helloFire.py --p=5 p
  4. 51
以太坊cppgolang区别 编程

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  8