【问题标题】:python: how to make different instances in a loop?python:如何在循环中创建不同的实例?
【发布时间】:2016-09-06 03:13:57
【问题描述】:

我需要创建一个类的多个实例,然后使用它的方法来查找输出。在多行中编写代码很简单,但我需要一种更有效的方法。基本上,这是我想要循环执行的操作:

class test(object):
    ...
    def job(self,x='hi',y=4):
        return y+len(x)

A1 = test()
y1 = A1.job(x = 'word_1',y=12)
A2 = test()
y2 = A2.job(x = 'word_2',y=5)
A3 = test()
y3 = A3.job(x = 'word_3',y=-12)
A4 = test()
y4 = A4.job(x = 'word_4',y=1)
A5 = test()
y5 = A5.job(x = 'word_5',y=120)
A6 = test()
y6 = A6.job(x = 'word_6',y=-1)
A7 = test()
y7 = A7.job(x = 'word_7',y=10)

当然,这并没有那么难,但是如果我想做100次的话……

【问题讨论】:

  • 制作对象列表。
  • 你的意思是y1 = A1.job()
  • 顺便说一句,我认为您需要在 static method 装饰器为您的 job 方法。
  • @PriyanshGoel,您能详细说明一下吗?我对 python 很陌生,不知道我该怎么做,谢谢。

标签: python loops methods instance names


【解决方案1】:

假设 python 2.7.10。您可以尝试以下方式(在您的类定义之后添加):

import random

[... class definition stuff ...]
nums = random.sample(xrange(1, 101), 10)
i = 0
for k in nums:
    A = test()
    print A.job('word_%s' % i, k)
    i += 1

这将运行 10 次,随机数介于 1 ... 100 之间。

免责声明:未经测试的代码——只是为了给出一个大致的想法。

【讨论】:

    【解决方案2】:

    您可以列出所有 A 和所有 Y 的列表,或者您甚至可以创建一个列表,基本上是一个包含 1 个或多个列表的列表。例如

    aList = [[A1, Y1], [A2, Y2], [A3, Y3]]  # Note, never name lists this way haha
    

    然后引用它们你会说:

    print(aList[1][1])
    

    第一个 1 进入 [A2, Y2] 列表,然后第二个进入并获取 Y2 变量。

    这样你就不需要所有的变量了,因为你可以创建一个循环遍历所有这些变量,这样就可以拥有无​​限的这些列表。 例如:

    aList = []  # Creates an empty list
    for x in range(0, 3):  #  This will go over the numbers from 0-2, 
        for y in range(0, 3):  # This will do the same.
            aList.append( (x, y) )
    print(aList)
    

    这将打印出来:

    [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
    

    所以这基本上是它说x是0,然后遍历y的所有数字,y已经遍历所有数字,x变为1,然后y遍历所有数字再次,直到达到所有可能的组合。你可以设置范围(0,100),如果你打印整个列表可能会滞后(就像我不小心做了哈哈) 因此,您可以看到这是创建包含许多变量的长列表的好方法。

    但是你也可以调用一个特定的数字,比如我们想要第三个列表,然后我们会调用 print 函数(在第 5 行):

    print(aList[2])
    

    我们说两个是因为 python 从 0 开始计数。 这将打印出来:

      (0, 2)
    

    如我们所愿,这是第三个列表。现在我们要打印该列表中的第二项,即数字 2,然后我们将打印函数调用为:

       print(aList[2][1])
    

    这将打印出来:

    2
    

    完全符合我们的要求。

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 2015-10-02
      • 2018-03-20
      • 2020-03-31
      • 1970-01-01
      • 2018-04-02
      • 2020-09-16
      • 2016-03-21
      • 2021-12-31
      相关资源
      最近更新 更多