我已经编写了一些类,我想通过创建我的类的多个实例来测试它们。我希望这些实例的名称遵循模式p1
、p2
等:
p1 = Point(1,1)
p2 = Point(2,2)
p3 = Point(3,3)
对于很多变量,有没有一种方法可以快速做到这一点?类似这样的东西:
for i in range(1,1000):
*magic goes here*
isinstance(p500, Point) # True
它被称为列表:
p = [Point(1, 1), Point(2, 2), Point(3, 3)]
现在p[0]
就是你的p1
,等等。
p = [Point(i, i) for i in range(1, 1000)]
isinstance(p[500], Point) # True
您可以修改当前范围更改globals()
例如:
globals()['p234'] = Point(1, 2)
print p234
然而,这是一种质量极低的方法:很难理解、维护,会造成可怕的范围污染,而且速度很慢(尽管这可能无关紧要)。使用合适的数据容器,我建议使用一个列表:
points = [Point(i, i) for i in xrange(500)]
assert isinstance(p[-1], Point)
通过这种方式,你可以对每个对象进行断言,比如:
points = [Point(i, i) for i in xrange(500)]
for point in points:
assert isinstance(point, Point)
您可以将它们作为关键字存储在字典中
vars_dict = {}
for i in range(1,1000):
vars_dict['p{}'.format(i)] = Point(i, i)
isinstance(vars_dict['p500'], Point) # True
或者像@RemcoGerlich做一样在可迭代中