Python.org上的课程教程

时间:2013-02-23 18:05:56

标签: python class python-3.3

我对这个问题略感不满,尝试使用Python 3.3.0。

http://docs.python.org/3/tutorial/classes.html上有一个类示例,其中包含以下代码:

class Bag:
    def __init__(self):
        self.data = []
    def add(self, x):
        self.data.append(x)

首先我想知道它缺少Python3通常要求的对象 class somename(object)

class Bag(object):

其次,当我尝试运行它时,我收到以下错误消息:

>>> a=Bag
>>> a.add('23')
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    a.add('23')
TypeError: add() missing 1 required positional argument: 'x'

WTF?

1 个答案:

答案 0 :(得分:7)

  

首先我想知道它缺少对象类somename(object)   Python3通常要求。

在Python 3中,您的类将自动派生自object,因此无需明确地执行此操作。在2中没有完成的唯一原因是为了向后兼容,因为所谓的新式(从对象派生)类的行为与旧式类略有不同。

a=Bag

这不是Bag的实例,只是说a现在是Bag类的新名称。因此,当您使用

a.add('23')

你没有调用实例的方法add,所以实例不作为第一个参数传递(它不能,因为还没有实例!)作为一个结果,它将'23'解释为self的值,因此您没有传递x,因此

TypeError: add() missing 1 required positional argument: 'x'

尝试

>>> a = Bag()
>>> a.add('23')
>>> a.data
['23']

代替。