roo*_*-11 1 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)
Run Code Online (Sandbox Code Playgroud)
首先我想知道它缺少Python3通常要求的对象类somename(object).
class Bag(object):
Run Code Online (Sandbox Code Playgroud)
其次,当我尝试运行它时,我收到以下错误消息:
>>> 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'
Run Code Online (Sandbox Code Playgroud)
WTF?
首先我想知道它缺少Python3通常要求的对象类somename(object).
在Python 3中,您的类将自动派生自object
,因此无需明确地执行此操作.在2中没有完成的唯一原因是为了向后兼容,因为所谓的新式(从对象派生)类的行为与旧式类略有不同.
a=Bag
Run Code Online (Sandbox Code Playgroud)
这不是一个实例Bag
,它只是说a
现在是这个Bag
类的新名称.结果,当你使用
a.add('23')
Run Code Online (Sandbox Code Playgroud)
你没有调用add
实例的方法,所以实例不会作为第一个参数传递(它不能,因为还没有实例!)结果,它将'23'解释为你的价值self
,因此你没有通过x
,因此
TypeError: add() missing 1 required positional argument: 'x'
Run Code Online (Sandbox Code Playgroud)
尝试
>>> a = Bag()
>>> a.add('23')
>>> a.data
['23']
Run Code Online (Sandbox Code Playgroud)
代替.
归档时间: |
|
查看次数: |
1155 次 |
最近记录: |