首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python类中重载位移运算符的逻辑

在Python类中重载位移运算符的逻辑
EN

Stack Overflow用户
提问于 2020-10-14 20:04:50
回答 1查看 212关注 0票数 0

我有一个Python,一个python类,我重载了>>操作符,这样我就可以创建一个准“连接”接口。理想实践中的一个例子是这样的。

代码语言:javascript
复制
from module import myclass
a = myclass()
b = myclass()
c = myclass()

a >> b >> c

到目前为止我的重载函数非常简单:

代码语言:javascript
复制
def __rshift__(self, right):
    self.chain[right] = None
    return self

abc像这样连接在一起时,想法是ab存储在哈希表中,bc存储在哈希表中。

问题在于,在实践中,a也会接收c并将其存储在哈希表中。我只想让a知道b,这样以后我就可以通过遍历a的键从b遍历c

我可以通过像这样重构代码来解决这个问题:

代码语言:javascript
复制
a >> b
b >> c

那么我在这里错过了什么呢?我如何更改我的实现,以便您可以在线指定整个系列的连接,或者这永远不可能实现?

EN

Stack Overflow用户

发布于 2020-10-14 20:12:29

在设置散列之后,您可以返回right,这样链接行为就可以应用于下一个类对象。

代码语言:javascript
复制
def __rshift__(self, right):
    self.chain[right] = None
    return right

然后,例如在a >> b >> c之后

代码语言:javascript
复制
>>> a
<__main__.myclass object at 0x000002128A755388>
>>> b
<__main__.myclass object at 0x000002128A70BBC8>
>>> c
<__main__.myclass object at 0x000002128A74BC48>

>>> a.chain
{<__main__.myclass object at 0x000002128A70BBC8>: None}  # stored b
>>> b.chain
{<__main__.myclass object at 0x000002128A74BC48>: None}  # stored c
>>> c.chain
{}

现在a有一个b条目,b有一个c条目,c为空

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64352863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档