EDIT:
As mentioned in the responses, search keyword for this question is "assignment operator overloading in python".
我想构造一个像整数或字符串类一样的类。类似于:
x = "hello"
x.upper() # says "HELLO"
y = MyClass()
y = 3
y = 5
print(y) # will print 5
y.previous_value() # will yield 3
如何构建这样的类?你知道吗
你不能做到这一点:
Python中的赋值将名称重新绑定到另一个对象。执行
y = 3
时,y
现在是整数3的名称,而不是MyClass
的实例的名称。这种行为完全不依赖于旧的RHS,如果没有deepmagic(您可以可能使用上下文管理器做一些事情),它就无法拦截。y用来引用的MyClass
实例不知道y不再引用它(或者它一开始就引用了);即使它引用了,y.previous_value()
也会在int上调用方法,而不是在MyClass
实例上。你知道吗你能做的最接近的就是玩
__setitem__
。这是Python在执行以下操作时调用的钩子:第二行翻译成
x.__setitem__(2, 5)
。使用此功能,您可以玩以下有趣的游戏:请注意,您需要使用
[]
来触发__setitem__
,它需要有一个值-这可以是任何对象,因为它被忽略了,所以我使用一个空切片。事实上,你需要跳过这样的语法环应该是一个重要的指标,你应该重新思考你为什么要这样做-几乎可以肯定有一个更好的方法来实现你的目标。你知道吗相关问题 更多 >
编程相关推荐