创建一个装饰器在Python中打印整数

问题描述 投票:0回答:1

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

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个回答
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并只有一个整数属性)。如果您只需要支持有限数量的数字选项(例如相互增加和减去美元金额以及乘以整数除以),那可能不会太糟糕。

© www.soinside.com 2019 - 2024. All rights reserved.