我想创建一个在数字上打印单位的装饰器。
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"
答案 0 :(得分:1)
Python中的装饰器适用于函数(更少见的是类),而不适用于变量。所以我认为调查他们的语法不会对你有帮助。
听起来你可以通过为你的钱创建一个包装整数的类来做你想做的事。您的班级可以使用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
个实例。如果你只想收回美元,你需要编写自己的数字方法版本,这是相当繁琐的(你可能想停止从PEG
继承并且只是整数属性)。如果你只需要支持有限数量的数字选项(比如相互增加和减去美元金额以及乘以整数除以),那可能不会太糟糕。