2016-06-17 8 views
0

私はstackoverflowの他の投稿を検索し、それらをコピーして返信として自分のマシンで試しました。しかし、それは投げ失敗を続ける"TypeError"TypeError:list()は、リストクラス継承のために最大で1つの引数(3)をとります。

# this is as one of other post in StackOverflow. 
class ListClass(list): 
    def __init__(self, *args): 
     super().__init__(self, *args) 
     self.append('a') 
     self.name = 'test' 

また、パスで空のクラスを試しました。しかし、それが継承されれば、それはまた失敗します。私は、何かを間違って追加するのではなく、何かを逃したと思いますか?

1)これは何ですか、"TypeError"とは何ですか? 2)どのように修正するのですか?

はTypeErrorにさらにスナップショット:

>>> class ListClass(list): 
...  pass 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: list() takes at most 1 argument (3 given) 
+2

ストップリスト 'にすべてのこれらの引数を渡そうと()'。 –

+0

3つの引数を(注釈)括弧で囲んで、単純な 'list'を作成したのとまったく同じように修正します。 – glibdud

+0

あなたは 'ListClass'への呼び出しを追加することができますので、達成することができないことについてより多くの洞察を得ることができますか? – kardaj

答えて

1

あなたはListClassオブジェクトを作成するときには、多くのparamertersにそれを与えている、これはあなたがやっていることです。

s = list(2,3,3) 

これは、あなたがすることshuoldものですやっている:

s = list([2,3,3]) 

このスニペットをあなたのインタプリタで試してみてください。

1

引数のタプルを渡しargsインスタンスのextendへ:

>>> class ListClass(list): 
...  def __init__(self, *args): 
...   super().__init__() 
...   self.extend(args) 
...   self.append('a') 
...   self.name = 'test' 
... 
>>> ListClass(1, 2, 3) 
[1, 2, 3, 'a'] 

それともlistiterable

>>> class ListClass(list): 
...  def __init__(self, *args): 
...   super().__init__(args) # one argument: tuple 
...   self.append('a') 
...   self.name = 'test' 
... 
>>> ListClass(1, 2, 3) 
[1, 2, 3, 'a'] 
で初期化することができますので、 super__init__argsタプルをアンパックパスを

更新:あなたはおそらく名前listにオブジェクトを割り当てるされて何をやったか

>>> list = [] 
>>> class ListClass(list): 
... pass 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: list() takes at most 1 argument (3 given) 
+0

あなたのコードをコピーして貼り付けましたが、運はありませんでした。私はそれがあなたのマシンで動作すると思いますが、私のマシン(Python 3.4)は一貫して同じTypeErrorで失敗します。違いは何か分かりません。 – GoGo

+0

私はこれをPython 3.4で行いました。端末を再起動します。リストオブジェクトを 'list'に割り当てました。更新を参照してください。 –

関連する問題