【发布时间】: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 == 0和assert type(foo.bar) == MyClass -
我不明白这与
__repr__.... 有什么关系。无论如何,对象不会返回任何东西。对象是值。你不能成为int和MyClass,除非MyClass派生自int -
这听起来像是一个 XY 问题,尤其是如果您无法为
MyClass提供必要的__eq__方法。 -
@juanpa.arrivillaga 或者,除非您创建一个新类,该类继承自
int和MyClass,如果MyClass被设计为用作 .a mixin,这可能是有意义的。
标签: python class object types int