Python.org上的类教程

1 投票
1 回答
1183 浏览
提问于 2025-04-17 16:53

我在这个问题上有点抓狂,正在尝试用Python 3.3.0。

这个链接上,有一个类的示例,代码如下:

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

首先,我想知道为什么它缺少了对象class somename(object),因为Python 3通常是需要这个的。

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'

这是什么鬼?

相关问题:

1 个回答

7

首先,我想知道为什么缺少了像这样定义的对象类 somename(object),这是 Python 3 通常要求的。

在 Python 3 中,你的类会自动继承自 object,所以不需要明确地写出来。之所以在 Python 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']

代替。

撰写回答