この質問は長い間答えられていないので、同様の問題を解決しようとしている人を助けようとします. 時間の経過と、スタック トレースを投稿したり、コードを適切にフォーマットしたりしなかったという事実を考えると、コードの特定の行がエラーの原因であることを示していることを無視します。最初に、このエラーが発生するコードをいくつか示し、その理由を説明します。
>>> a_list = []
>>> a_list()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
このエラーは、変数 a_list がメモリ内の特定の空のリストを指しているために発生します。リスト オブジェクト自体は呼び出し可能ではありません。__call__
Callable とは、関数またはクラス コンストラクター (またはマジック メソッドを実装したオブジェクトのように、かなり珍しい)のように実行できることを意味します。実際のリストは実行しません。
リストに 1 つの項目を追加する適切な方法は、append を使用することです (項目をリストにラップしてから、extend メソッドを使用していることがわかりますが、これは簡単な方法ではないため、効率が悪い可能性があります。 )
>>> a_list.append('foo')
インデックスを使用してそのアイテムを取得できます。
>>> a_list[0]
'foo'
新しい Python 学習者 (または入力が速すぎる専門家) によくある初期の間違いは、括弧の代わりに括弧を使用することであり、同じエラーが発生することがわかります。
>>> a_list(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
インタプリタでは、これはすぐに検出されますが、コードを実行するまで実行されないものが Maya にある可能性が高いため、この問題は検出されませんでした。
別の可能性として、ビルトインを上書きしているようですobject
。インスタンス化されたオブジェクトを呼び出そうとすると、同様のエラーが発生します。
>>> an_object = object()
>>> an_object()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'object' object is not callable
list
それで、ビルトインのようなリストコンストラクターを上書きしたのではないかと思いますcmds.textScrollList
。その場合は、コードを調べて、次のようなリストを割り当てている可能性のあるケースを探します。
list = ['foo', 'bar'] # Don't do this!!!
修正して、Python セッションを再起動してください。
リストの呼び出しを理解するのに役立つ反例として、リストを実装することはできます(実装すべきではありません)。
実際にlist
オブジェクトを呼び出し可能にするには、それをサブクラス化し、__call__
メソッドを実装します (これもまた、おそらくプロダクション コードでは行うべきではありません)。この場合、リストに渡す引数でリストを拡張します。
class MyList(list):
def __call__(self, *args):
self.extend(args)
>>> a_list = MyList(['foo', 'bar', 'baz'])
>>> a_list('ham', 'spam', 'eggs', 'spam')
['foo', 'bar', 'baz', 'ham', 'spam', 'eggs', 'spam']
これをしないでください。