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

时间:2018-07-11 17:01:24

标签: python list object instantiation

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

Account Name          Balance
YTD                   10000
Interest              100
Depreciation          500
Less Distributions    -7000
Plus Paid in Capital  600
Principal             2600
Result                100      //(i.e 10000/100)

运行上面的代码时,出现以下错误消息:

   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()中创建的myList就会超出范围?将__init__()命令移到类定义的顶部时,会收到相同的错误消息:

myList = list()

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

我还应该补充一点,我正在编写Python 2.7。我的公司喜欢这个版本,所以我坚持使用它。不要问。

谢谢

2 个答案:

答案 0 :(得分:1)

在Python中,__init____new__之间是有区别的。也就是说,当您的代码达到__init__时,它已经“被构造”了。只有这样,您才能向实例添加新的“字段”,例如self.myList = []中的__init__

def addSomething(cls, x)的作用是,您可以将其命名为cls,但实际上它是实例。因此,您应该改写self.myList.append()

答案 1 :(得分:1)

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