如何创建包含空列表的 Python 对象

How to create a Python object that holds an empty list

我是一名 Java 努力学习 Python 的程序员,而且几乎肯定会问一个重复的问题。在我的 Python 代码中,我需要创建一个基本上包含列表的对象。当一个对象被实例化时,列表是空的。在代码的后面,我想添加项目:

   1     #!/usr/bin/python
   2
   3     class objWithList:
   4       # myList                 # define a global variable here?
   5       def __init__(self):
   6         print "New Object created!"
   7         myList = list()        # tell Python "myList" is a list?
   8       def addSomething(cls, x):
   9         myList.append(x)
  10     
  11     myObj = objWithList()      # create the object
  12     str1 = "Add me"
  13     myObj.addSomething(str1)   # add item to obj's list

当我运行上面的代码时,我得到这个错误信息:

   me@myBox/python_Sandbox# ./test1.py
   New Object created!
   Traceback (most recent call last):
     File "./test1.py", line 13, in <module>
       myObj.addSomething(str1)   # add item to obj's list
     File "./test1.py", line 9, in addSomething
       myList.append(x)
   NameError: global name 'myList' is not defined
   me@myBox/python_Sandbox#

所以看起来对象创建成功了,但是当我调用addSomething()时,列表没有定义。那是因为一旦对象构造函数完成,在 __init__() 中创建的 myList 就超出了范围吗?当我将 myList = list() 命令移动到 class 定义的顶部时,我收到相同的错误消息:

   3     class objWithList:
   4       myList = list()              # moved list creation here
   5       def __init__(self):
   6         print "New Object created!"
   7       def addSomething(cls, x):
   8         myList.append(x)

那么如何创建一个在创建对象后可用的空列表?

我还应该补充一点,我写的是 Python 2.7。我的公司喜欢这个版本,所以我坚持使用它。别问了。

谢谢

在Python中,__init____new__有区别。也就是说,当您的代码命中 __init__ 时,它已经是 "constructed"。只有这样,您才能向实例添加新的 "fields",例如 __init__.

中的 self.myList = []

什么def addSomething(cls, x),你可以把它命名为cls,但实际上它是实例。所以你应该写成self.myList.append()

在您的 __init__ 函数中 myList 只是局部变量。使用 self.myList 使其成为 class 成员。当然,也可以使用 self 在函数 addSomething() 中访问它:self.myList.append(x)。您还需要将方法 addSomething 的签名从 addSomething(cls, x) 更改为 addSomething(self, x)