如何制作 python 数组 class 的副本?
how to make a replica of python array class?
我正在尝试为迭代自定义我自己的 class,并尝试将其插入计算中:
class Iteration:
def __init__(self, array):
self.array = array
def __pow__(self, power, modulo=None):
new_array = list()
for i in self.array:
new_array.append(i ** power)
return new_array
def __len__(self):
return len(self.array)
def __getitem__(self, indices):
return self.array[indices]
def mul(x):
return x ** 2 + 3 * x ** 3
it = Iteration([1, 2, 3])
print(mul(2)) #=> 28
print(mul(it)) #=> [1, 4, 9, 1, 8, 27, 1, 8, 27, 1, 8, 27]
为什么 mul(it) 合并了重载结果?我该如何解决这个问题?
我想:
print(mul(it)) #=> [4, 28, 90]
您的 __pow__
return 是一个列表,而不是 Iteration
实例。 +
和 *
操作是列表操作,列表实现 +
和 *
作为连接和重复。
[1, 4, 9] + 3 * [1, 8, 27]
重复[1, 8, 27]
3次得到[1, 8, 27, 1, 8, 27, 1, 8, 27]
,然后拼接[1, 4, 9]
和[1, 8, 27, 1, 8, 27, 1, 8, 27]
.
您需要 return 来自 __pow__
的 Iteration
实例,并且您还需要实施 __add__
和 __mul__
,而不仅仅是 __pow__
.当您使用它时,您可能还想实现 __str__
或 __repr__
,这样您就可以在打印时看到 Iteration
对象正在包装的数据。
我正在尝试为迭代自定义我自己的 class,并尝试将其插入计算中:
class Iteration:
def __init__(self, array):
self.array = array
def __pow__(self, power, modulo=None):
new_array = list()
for i in self.array:
new_array.append(i ** power)
return new_array
def __len__(self):
return len(self.array)
def __getitem__(self, indices):
return self.array[indices]
def mul(x):
return x ** 2 + 3 * x ** 3
it = Iteration([1, 2, 3])
print(mul(2)) #=> 28
print(mul(it)) #=> [1, 4, 9, 1, 8, 27, 1, 8, 27, 1, 8, 27]
为什么 mul(it) 合并了重载结果?我该如何解决这个问题? 我想: print(mul(it)) #=> [4, 28, 90]
您的 __pow__
return 是一个列表,而不是 Iteration
实例。 +
和 *
操作是列表操作,列表实现 +
和 *
作为连接和重复。
[1, 4, 9] + 3 * [1, 8, 27]
重复[1, 8, 27]
3次得到[1, 8, 27, 1, 8, 27, 1, 8, 27]
,然后拼接[1, 4, 9]
和[1, 8, 27, 1, 8, 27, 1, 8, 27]
.
您需要 return 来自 __pow__
的 Iteration
实例,并且您还需要实施 __add__
和 __mul__
,而不仅仅是 __pow__
.当您使用它时,您可能还想实现 __str__
或 __repr__
,这样您就可以在打印时看到 Iteration
对象正在包装的数据。