如何在python 3中进行切片修改(或缺少运算符重载)

如何在python 3中进行切片修改(或缺少运算符重载),python,python-3.x,numpy,overloading,Python,Python 3.x,Numpy,Overloading,在numpy中,可以获取切片并对其进行修改: a = np.array([1, 2, 3, 4, 5]) a[2:4] = [7, 8] # now a is np.array([1, 2, 7, 8, 5]) 它是如何实施的 假设您有一个2d数组类,Array2d,它有一些2d数组的复杂实现,比如二维trie。您希望\uuuu getitem\uuuu方法返回Array2dSlice对象,该对象可以修改: a = Array2d() ... # [1 2 3] # a = [4

在numpy中,可以获取切片并对其进行修改:

a = np.array([1, 2, 3, 4, 5])
a[2:4] = [7, 8]
# now a is np.array([1, 2, 7, 8, 5])
它是如何实施的

假设您有一个2d数组类,
Array2d
,它有一些2d数组的复杂实现,比如二维trie。您希望
\uuuu getitem\uuuu
方法返回
Array2dSlice
对象,该对象可以修改:

a = Array2d()
...
#     [1  2  3]
# a = [4  5  6]
#     [7  8  9]

a[1:3, 1:3] = [[0, 0], [0, 0]]
#     [1  2  3]
# a = [4  0  0]
#     [7  0  0]

如果Python中存在运算符重载,我会在
Array2dSlice
类中使用它。但是没有运算符重载。有合适的替代方法吗?

当索引操作符
[]
出现在赋值操作符
=
的左侧时,称为
\uuuuuuu setitem\uuuuuu
的特殊方法,而不是
\uu getitem\uuuuuuu

在这种情况下,有效调用为:

a.__setitem__(tuple(slice(1, 3), slice(1, 3)), [[0, 0], [0, 0]])

这将在一个位置提供有效修改数组所需的所有信息。

如果索引运算符
[]
出现在赋值运算符
=
的左侧,则称为
\uuuuu setitem\uuuuuuuuu
的特殊方法不是
\uuu getitem\uuuuuu

在这种情况下,有效调用为:

a.__setitem__(tuple(slice(1, 3), slice(1, 3)), [[0, 0], [0, 0]])

这将在一个位置提供有效修改数组所需的所有信息。

如果索引运算符
[]
出现在赋值运算符
=
的左侧,则称为
\uuuuu setitem\uuuuuuuuu
的特殊方法不是
\uuu getitem\uuuuuu

在这种情况下,有效调用为:

a.__setitem__(tuple(slice(1, 3), slice(1, 3)), [[0, 0], [0, 0]])

这将在一个位置提供有效修改数组所需的所有信息。

如果索引运算符
[]
出现在赋值运算符
=
的左侧,则称为
\uuuuu setitem\uuuuuuuuu
的特殊方法不是
\uuu getitem\uuuuuu

在这种情况下,有效调用为:

a.__setitem__(tuple(slice(1, 3), slice(1, 3)), [[0, 0], [0, 0]])
这将在一个位置提供有效修改阵列所需的所有信息。

可能重复的可能重复的可能重复的可能重复的可能重复的