gpt4 book ai didi

python - 重载实例[key] += val

转载 作者:太空狗 更新时间:2023-10-30 00:49:16 26 4
gpt4 key购买 nike

我正在编写一个用于 Jython 的 Java 集合类。我希望最终用户能够以这种方式操作集合:

myCollection = MyJavaCollection()
myCollection[0] += 10.;
a = myCollection[0]; //a = 10
myCollection[0] += 20.;
b = myCollection[0]; //b = 20

我在Python文档中找到的是以下方法:

  • __getitem____setitem__ 方法应该完成括号运算符重载的工作。

  • __iadd__ 方法是 += 的理想选择。

我怎样才能把两者混合起来做我想做的事?

最佳答案

请注意 myCollection[0] += 10.; 实际上会被解释为:

myCollection.__setitem__(0,  myCollection.__getitem__(0).__iadd__(10.))

因此,要完成这项工作,您需要实现:

  • __getitem____setitem__MyJavaCollection 上;和
  • __iadd__(或 __add__,如果 __iadd__ 未实现,Python 将回退到哪个)无论什么 .__getitem__ 将返回,而不是 MyJavaCollection 本身 - 如果它将返回已经实现加法的内容,例如示例中的 float ,你很好。

快速演示:

>>> class Container(object):

def __init__(self, contained):
self.contained = contained

def __getitem__(self, key):
print "Container.__getitem__"
return self.contained

def __setitem__(self, key, val):
print "Container.__setitem__"
self.contained = val


>>> class Contained(object):

def __add__(self, other):
print "Contained.__add__"
return "foo"


>>> test = Container(Contained())
>>> test[0] += 1
Container.__getitem__
Contained.__add__
Container.__setitem__
>>> test.contained
'foo'

关于python - 重载实例[key] += val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31591873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com