【问题标题】:Create a Decorator Printing An Integer in Python在 Python 中创建一个打印整数的装饰器
【发布时间】:2018-06-07 13:46:42
【问题描述】:

我想创建一个在数字上打印单位的装饰器。

money = 10
print(money)

结果为“10 美元”

money = 1
print(money)

结果为“1 美元”

我知道我需要包装 money.__str__(),但我不确定如何使用装饰器进行一般性包装。

我在正确的轨道上吗?下面的东西能不能变成装饰器?

def str_cur(money):
    if money == 1 or money == -1:
       return f"{money} dollar"
    else
       return f"{money} dollars"

【问题讨论】:

标签: python python-3.x python-decorators


【解决方案1】:

Python 中的装饰器适用于函数(很少适用于类),而不适用于变量。所以我认为调查他们的语法对你没有帮助。

听起来你可以通过为你的钱创建一个包含整数的类来做你想做的事。您的类可以有一个 __str__ 方法,其中包括货币名称和数字:

class Dollars(int):
    def __str__(self):
        if abs(self) == 1:
            return f"{self} dollar"
        else
            return f"{self} dollars"

现在你可以这样做了:

money = Dollars(10)
print(money) # prints "10 dollars"

我上面写的Dollar 类继承自int,所以你可以对它进行所有正常的数值运算,但是你通常会得到一个正常的int 对象而不是另一个Dollar 实例。如果你只想拿回钱,你需要编写自己的数字方法版本,唉,这相当乏味(你可能想停止从int 继承而只拥有一个整数属性)。如果您只需要支持有限数量的数字选项(例如相互加减美元金额以及乘以和除以整数),那可能还不错。

【讨论】:

  • 谢谢!从本质上讲,这以正常方式实现了 GOF 装饰器模式,我认为你是对的,这是要走的路。
猜你喜欢
  • 2017-11-16
  • 1970-01-01
  • 2015-11-21
  • 2017-03-17
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 2011-09-05
相关资源
最近更新 更多