web-dev-qa-db-ja.com

Pythonでは、オブジェクトが添え字付きかどうかはどういう意味ですか?

どのタイプのオブジェクトが「添え字付き」のドメインに入るのでしょうか。

279
Alistair

それは基本的にオブジェクトが__getitem__()メソッドを実装することを意味します。言い換えれば、それは「コンテナ」であるオブジェクト、つまりそれらが他のオブジェクトを含むことを意味します。これにはリスト、タプル、そして辞書が含まれます。

255
mipadi

私の頭から離れて、以下は添え字付きの唯一の組み込みです:

string:  "foobar"[3] == "b"
Tuple:   (1,2,3,4)[3] == 4
list:    [1,2,3,4][3] == 4
dict:    {"a":1, "b":2, "c":3}["c"] == 3

しかし、 mipadiの答え は正しいです - __getitem__を実装するクラスはすべて添え字付きです

61
Dan

スクリプト可能オブジェクトは、それに対して行われた操作を記録するオブジェクトであり、再生可能な「スクリプト」としてそれらを保存することができます。

たとえば、 Application Scripting Framework を参照してください。

さて、Alistairが自分が何を求めているのかわからず、(他の人が編集したように) "添え字付きの"オブジェクトを本当に意味していたのなら、(mipadiも回答しているように)

添え字付きオブジェクトは、__getitem__特殊メソッド(シンクリスト、辞書)を実装する任意のオブジェクトです。

15
tzot

計算における添え字の意味は次のとおりです。「シンボル(概念的には添え字として書かれているが、実際には通常は書かれていない)。

さて、 @ user2194711 の簡単な例では、2つの理由からappend要素をリストの一部にすることができないことがわかります。 -

1)メソッドappendを実際には呼び出していません。それを呼び出すには()が必要だからです。

2)エラーは、関数またはメソッドが添え字付きではないことを示しています。リストやシーケンスのように索引付けできないことを意味します。

今これを見なさい: -

>>> var = "myString"
>>> def foo(): return 0
... 
>>> var[3]
't'
>>> foo[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'function' object is not subscriptable

それは、添字がないことや、要素がシーケンス内にあるようにfunctionに言うことがないことを意味します。そして[]の助けを借りて私たちがするようにそれらにアクセスすることはできません。

また。 mipadi が彼の答えで言ったように。それは基本的にオブジェクトが__getitem__()メソッドを実装することを意味します。 (添え字付きの場合)したがって、エラーが発生しました:

arr.append["HI"]

TypeError: 'builtin_function_or_method'オブジェクトは添え字付きではありません

11
Vicrobot

私はこれと同じ問題を抱えていました。やっていた

arr = []
arr.append["HI"]

そのため[を使用するとエラーが発生していました。それはarr.append("HI")であるべきです

7
user2194711