【问题标题】:Can an object return an integer but have a custom type?对象可以返回整数但具有自定义类型吗?
【发布时间】:2018-10-22 08:30:09
【问题描述】:

是否可以在 Python 中做到这一点:

class Foo():
    def __init__(self):
        self.bar = MyClass()

foo = Foo()  

assert foo.bar == 0
assert type(foo.bar) == MyClass

如果 0 是一个字符串,那么 __repr__ 可以在 MyClass 中使用。该值将为“0”,但类型为 MyClass。但是由于 __repr__ 只能返回字符串,并且 foo.bar 必须是 int __repr__ 不起作用。那么是否可以让 MyClass() 给出值 0(int)但仍将其类型保持为 MyClass?

【问题讨论】:

  • 如果参数为 0,您可以重新定义 __eq__ 以返回 True
  • 为什么不将整数存储在 MyClass 中?所以你可以做类似assert foo.bar.val == 0assert type(foo.bar) == MyClass
  • 我不明白这与__repr__.... 有什么关系。无论如何,对象不会返回任何东西。对象是值。你不能成为intMyClass,除非MyClass 派生自int
  • 这听起来像是一个 XY 问题,尤其是如果您无法为 MyClass 提供必要的 __eq__ 方法。
  • @juanpa.arrivillaga 或者,除非您创建一个新类,该类继承自 intMyClass,如果 MyClass 被设计为用作 .a mixin,这可能是有意义的。

标签: python class object types int


【解决方案1】:

您可以使用 Python 标准库的 numbers 包来完成您所说的,它实现了 PEP 3141。具体来说,您可以从numbers.Integral 派生MyClass,并根据需要覆盖特殊方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多