如何在 python 中混合普通参数和切片参数



我有一个类,我想从一个数组和一个切片创建一个实例。我希望语法使用例如列表和 numpy 数组使用的冒号语法。以下示例是一个 MNWE(最小非工作示例(:

import numpy as np
class A():
def __init__(self, data):
self.data = data
def __getitem__(self, index):
return self.data.__getitem__(index)
@classmethod
def fromArray(cls, array, index):
return cls(array.__getitem__(index))
x = np.empty((4, 2, 2)) 
a = A(x)
print(a[:, 0, 0]) 
# Create from array, using slices:
my_slices = (slice(0, -1, 1), slice(0, 1, None), slice(0, 1, None))
b = A.fromArray(x, my_slices)
print(b.data)
# Create from array, using slice colon syntax (fails):
c = A.fromArray(x, :, 0, 0)
print(c.data)

我希望结果是相同的,除了平面尺寸。

我不知道你想做的事情是否可能。

做工厂班怎么样?

class AFactory:
def __init__(self, x):
self.x = x
def __getitem__(self, index):
return A.fromArray(self.x, index)
c = AFactory(x)[:, 0, 0]
print(c.data)

或者,如果您希望在数组之前设置切片:

class AFactory:
def __getitem__(cls, index):
return lambda x: A.fromArray(x, index)
c = AFactory()[:, 0, 0](x)
print(c.data)

最新更新