[英]Class Tutorial on Python.org
我對此感到有點生氣,嘗試使用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'
WTF?
首先,我想知道它缺少了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']
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.