【问题标题】:Return string instead of class in Python [duplicate]在Python中返回字符串而不是类[重复]
【发布时间】:2022-01-27 14:07:15
【问题描述】:

您好,在最近的一次本地编程竞赛中,您必须定义一个类,该类接受链式参数并返回它们的总和,例如:

>>> Chain(2.5)(2)(2)(2.5) # sum
9
>>> Chain(3)(1.5)(2)(3) # sum
9.5

我能写的最好的就是这段代码:

class Chain():

    value = 0

    def __new__(self, num):
        self.value += num
        return self

obj = Chain(2)(3)
print(obj.value)

但返回类型是类而不是 int,而且我使用的静态属性显然是错误的。希望有任何帮助。

附: :请注意,比赛于 2022 年 1 月 7 日结束,所以我认为发布这个问题没有任何问题。

【问题讨论】:

  • 您需要查看__call____str__ 方法,而不是__new__...
  • @deceze 谢谢我可以用你的建议写答案。我还更改了标题以更好地代表问题和答案。但是我不确定是否应该删除该问题(因为它没有答案并且您的评论是正确答案)还是保留它。也许一个更好的问题标题可以使它对可能面临同样问题的其他人有用
  • @AvSaba 请提供工作代码
  • @sahasrara62 是的,您的链接回答了这个问题。有趣的是,这个问题是在比赛发生的同一天提出的。
  • @AvSaba 不知道你在说什么上下文,但我看到这个问题所以将其标记为重复

标签: python class return instance


【解决方案1】:

您可以从float 继承(因为您需要支持十进制数字)并像这样实现__call__

class Chain(float):
    def __call__(self, value):
        return self.__class__(self+value)

>>> Chain(3)(1.5)(2)(3) # sum
9.5
>>> Chain(2.5)(2)(2)(2.5) # sum
9.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多