1

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'

なんてこと?

4

1 に答える 1

7

まず、Python3が通常要求するオブジェクトクラスsomename(object)が欠落しているのではないかと思います。

Python 3では、クラスは自動的にから派生するobjectため、明示的に行う必要はありません。これが2で行われなかった唯一の理由は、いわゆる新しいスタイル(オブジェクトから派生)クラスが古いスタイルのクラスとはわずかに異なる動作をしたため、下位互換性のためでした。

a=Bag

これはのインスタンスを作成するのではなく、クラスの新しい名前になったBagことを示しているだけです。その結果、使用する場合aBag

a.add('23')

インスタンスのメソッドを呼び出していないaddため、インスタンスは最初の引数として渡されていません(インスタンスがまだないため、渡されません)。その結果、「23」は次のように解釈されます。の値、したがって、selfを渡さなかったため、x

TypeError: add() missing 1 required positional argument: 'x'

試す

>>> a = Bag()
>>> a.add('23')
>>> a.data
['23']

代わりは。

于 2013-02-23T18:11:00.307 に答える