簡體   English   中英

Python.org上的類教程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM