1

我对此有点生气,尝试使用 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 通常需要的对象类 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'

怎么回事?

4

1 回答 1

7

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

在 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']

反而。

于 2013-02-23T18:11:00.307 回答