【问题标题】:Python objects copying objects previously created,Python 对象复制先前创建的对象,
【发布时间】:2014-04-01 13:38:45
【问题描述】:

我有一个在循环中创建对象的程序(下面的简化版本)。在该对象内有一个变量,应在创建对象时设置。但是,它似乎是存储先前创建的对象的值...例如/

class createList()

    list1 = []

    def __init__(self, int):
        list1.append(int)

for i in range (0, 3)
   x = createList(i)
   print(x.list1)


>>> 0
>>> 0, 1
>>> 0, 1, 2
>>> 0, 1, 2, 3

谁能指出我做错了什么的方向?

【问题讨论】:

  • 你的类定义不是有效的python,它缺少一个冒号。
  • @msvalkon,它缺少一个冒号。我认为分号不会有帮助

标签: python object


【解决方案1】:

您已将list1 定义为类变量。因此它与createList 的所有实例共享。

你想要的是将它定义为一个 instance 变量。

class createList(object):
    def __init__(self, integer):
        self.list1 = []
        self.list1.append(integer)

>>> for i in range(3):
...     x = createList(i)
...     print(x.list1)
...     
... 
[0]
[1]
[2]

在列表中存储单个值听起来有点奇怪,但在您给出的上下文中是不可能的。此外,覆盖内置的int 也是不好的做法。

ps。从技术上讲,python 没有类或实例变量,它具有数据属性。然而,类语句主体中定义的变量是在每个实例化对象之间共享的静态变量。实例变量也是数据属性,但对于相关对象来说是本地的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多