Python.org上的类教程
我在这个问题上有点抓狂,正在尝试用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']
代替。