gpt4 book ai didi

python - 是否可以在 Python 中覆盖赋值 ('=' ) 运算符?

转载 作者:太空狗 更新时间:2023-10-29 20:38:43 24 4
gpt4 key购买 nike

这有双杠吗?也许是这样的:(更新)

class Tree:
def __init__(self, item_or_tree):
self._setto(item_or_tree)

def __assign__(self, val):
self._setto(item_or_tree)

def __setitem__(self, which, to_what):
## I would like this to call __assign__ on the Tree object at _tree[which]
to_what._tree[which] = to_what

def __getitem__(self, which):
return self._tree[which]

def __len__(self): return len(self._tree)

def __eq__(self, other):
if isinstance(other, Tree):
if other._is_tree:
return (self._item == other._item) and (self._tree == other._tree)
else:
return self._item == other._item
else: return self._item == other

def _setto(self, item_or_tree):
if isinstance(item_or_tree, Tree):
self._set_from_Tree(item_or_tree)
elif isinstance(item_or_tree, dict):
self._set_from_dict(item_or_tree)
else:
self._set_from_other(item_or_type)


def _set_from_Tree(self, other_Tree):
self._tree = other_Tree[:]
self._item = other_Tree
self._is_tree = other_Tree._is_tree

def _set_from_dict(self, the_dict):
self._is_tree = True
self._item = None
self._tree = {}
for key, val in the_dict.items():
self._tree[key] = Tree(val)

def _set_from_other(self, other):
self._is_tree = False
self._tree = None
self._item = other

class TreeModel(Tree, QAbstractItemModel):
...
## a whole bunch of required overrides
## etc
...

我想做的是实现一个通用的树结构,它尽可能直观地(对我来说)起作用,并且还与 PyQt5 的模型- View -委托(delegate)架构无缝集成。

我希望能够将传入的 item_or_tree 设置为项目或树。所以我希望重载在项目上使用 = 运算符时调用的函数。

PyQt 有这个基于项目的架构,其中 QAbstractItemModel 被覆盖。这是(我猜)应该返回/接受 QModelIndex 对象。这些是表树(二维数组)。

所以我正在创建一个单一的树结构,它可以包含自己,处理 2 个相反的索引范例,并且与 Python 和其他一切一起玩得很好。

最佳答案

不可能覆盖x = y 的实现。参见 Facts and Myths about Python Names and Values有关赋值含义的详细信息。

您可以使用 __setattr__ 覆盖 x.a = y,它(大致)是 x.__setattr__('a', y)

您可以使用 __setitem__ 覆盖 x[k] = y,它(大致)是 x.__setitem__(k, y)

但是你不能覆盖x = y

关于python - 是否可以在 Python 中覆盖赋值 ('=' ) 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25456448/

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