【问题标题】:Python: Create 50 objects using a for loop [duplicate]Python:使用 for 循环创建 50 个对象 [重复]
【发布时间】:2018-11-05 16:32:14
【问题描述】:

我最近是 python 新手,我正在做一个项目,我创建了一个类:-

class foo():
    def __init__(self, name):
    self.name = name

我想创建这个类的 50 个对象,它们应该被命名为 obj1, obj2, obj3,..., obj50 我正在尝试创建这些类,例如

for i in range(1,51):
    obj + i = foo(i)

这样就创建了 obj1、obj2、obj3、...、obj50 等 50 个对象,名称分别为 1、2、3、...、50。 但由于某种原因,这对我不起作用。 谁能告诉我在这里做错了什么。 我知道我可以使用列表来存储对象,但出于某种原因,我想这样做。 非常感谢任何帮助。

【问题讨论】:

  • obj + i 在 lhs 中不会像你想象的那样工作。
  • 为什么不使用列表来存储对象而不是构造它们的名称?
  • 能否详细说明
  • 看看这里:stackoverflow.com/a/3182241/986160(可能重复)

标签: python python-3.x oop for-loop python-3.5


【解决方案1】:

你可以programatically set the attribute to the current module 这就是你想要做的。创建对象列表要好得多。

import sys

thismodule = sys.modules[__name__]   

class foo():
    def __init__(self, name):
        self.name = name

for i in range(1,51):
    setattr(thismodule, 'obj' + str(i), foo(i))

【讨论】:

    【解决方案2】:

    如果你还不知道数组的概念,我想你可能需要学习一下。

    obj = [] # create an empty array
    for i in range(1,51):
        obj.append(foo(i))
    

    您可以使用obj[1], obj[2], ... 访问它,而不是尝试使用obj1, obj2, ...。这基本上是一个数组。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      class foo():
          def __init__(self,name):
              self.name = name
      
          def __str__(self):
              return name
      
          def __repr__(self):  # will print the "name" as repres of this obj
              return self.name
      
      objects= [foo(str(i)) for i in range(1,51)] # create 50 foo-objects named 1 to 50
      
      print(objects) # list that contains your 50 objects
      

      输出:

      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 
       25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 
       46, 47, 48, 49, 50]
      

      如果你删除 def __repr__() 你会得到类似的东西:

      [<__main__.foo object at 0x7fd4e9b78400>, 
       <__main__.foo object at 0x7fd4e9b78470>, 
       ... etc ..., 
       <__main__.foo object at 0x7fd4e9afd940>, 
      <__main__.foo object at 0x7fd4e9afd9b0>]
      

      【讨论】:

        猜你喜欢
        • 2015-06-23
        • 2020-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多