我想传递一个参数来控制产生的数据的大小。例如,
class Something:
def __init__(self):
self.all_data = list(range(23))
def __iter__(self, size):
random.shuffle(self.all_data)
batch = list()
for i in self.all_data:
batch.append(i)
if len(batch) >= size:
yield batch
batch = list()
a = Something()
for i in a: # TypeError: __iter__() missing 1 required positional argument: 'size'
print(i)
for i in a(5): # TypeError: 'Something' object is not callable
print(i)
Run Code Online (Sandbox Code Playgroud)
您可以通过实现__call__方法来获得理想的效果,该方法将收集数据供__iter__使用,我在init构造函数中设置了 self.size以确保属性存在。
这不是你想要的,因为它不是直接传递参数而是通过对象的状态,但它在以下情况下工作 for i in a(5)
请考虑当有人会像这样使用您的代码时for i in a,它会改变逻辑,例如,您可以检查 self.size 是否不是None。
import random
class Something:
def __init__(self):
self.all_data = list(range(23))
self.size = 0
def __iter__(self):
random.shuffle(self.all_data)
batch = list()
for i in self.all_data:
batch.append(i)
if len(batch) >= self.size:
yield batch
batch = list()
def __call__(self, n):
self.size = n
return self
a = Something()
for i in a(0):
print(i)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2324 次 |
| 最近记录: |