【问题标题】:How to create different objects with a constructor list如何使用构造函数列表创建不同的对象
【发布时间】:2019-08-17 07:58:33
【问题描述】:

我有一个列表,其中包含不同类的不同构造函数。但是构造函数总是返回相同的对象,因为它们具有相同的内存方向。

我有这样的事情:

l=[class1(),class2(),class3()]
l2 = []

如果我尝试用它创建不同的对象,它会返回具有相同内存方向的相同对象。我正在这样做:

for i in range(50):
    obj = l[random]
    l2.append(obj)

l2 有 50 个对象,但第一类的所有对象都是相同的,并且它们具有相同的内存方向。其他类也是如此。

我想要 50 个不同的对象。

【问题讨论】:

  • 1) “我有一个列表,其中包含不同类的不同构造函数。” 不,您有一个包含 3 个不同 对象 的列表。不是构造函数。 2) “但是构造函数总是返回相同的对象,因为它们具有相同的内存方向。” 什么?你是说l[0] is l[1] is l[2]
  • l=[class1(),class2(),class3()] 创建三个对象。在任何意义上,它都不是“构造函数列表”。将这三个对象之一附加到列表不会神奇地导致构造一个新对象。
  • 没错,我怎么能随机调用不同的构造函数并每次创建不同的对象?感谢您的回答。

标签: python list class constructor


【解决方案1】:

每次要向列表中添加实例时,都必须调用类的构造函数。为此,我建议您使用类列表而不是对象实例列表(否则您只是将这 3 个实例的相同引用添加到列表中)

l=[class1,class2,class3]
for _ in range(50):
    cls = l[random]
    l2.append(cls())

【讨论】:

  • 非常感谢。这就是我一直在寻找的。​​span>
猜你喜欢
  • 2016-09-23
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2013-09-24
  • 2011-12-15
相关资源
最近更新 更多