2016-07-10 3 views
0

私は現在Pythonを勉強しており、辞書について学んでいます。データメンバのみを含み、メソッドを持たないC++のオブジェクトと辞書を比較するのは正しいですか?Pythonの辞書はC++のオブジェクトと見なすことができますか?

もちろんクラス定義がないので、すべてのオブジェクトインスタンスをPythonで別々に宣言することができますが、私はそれを学習の目的でメソッドを持たないオブジェクトと関連付けるのは良いアナロジーだと思います。それとも私がここで欠けているものですか?

+3

辞書にはメソッドがあります。 –

+0

@MartijnPieters私は、あなたがそれらにメソッドを追加できるかどうかわかりませんでした...だから、これは類似性がさらに強くなることを意味します。 –

+2

私はあなたが*もっと*メソッドを追加できるとは言わなかった。辞書には*の方法があると私は言った。 'dict'クラス定義は書き込み可能ではありませんが、サブクラス化することはできます。 –

答えて

2

Pythonのすべての値は、オブジェクト、辞書が含まれています。辞書にもメソッドがあります!たとえば、dict.keys()がメソッドなので、Pythonのdictインスタンスはではなく、のデータメンバーのみのオブジェクトです。

ここでです。辞書のクラス定義です。 PythonのCコードで定義されているからといって、dictはそれほどクラスにはなりません。たとえば、メソッドを追加する必要がある場合は、dictをサブクラス化することができます。

+0

しかし、Pythonで辞書のクラスが定義されている場合、どのようにして誰かがそれにすべての種類のメソッドとデータ変数を追加できますか?新しい辞書が辞書クラスの構造を継承して作成され、それに多くの要素が追加されていますか?私はPythonコードで辞書クラスの定義が何であるか知りたいと思うでしょう。 –

+0

@yoyo_fun:なぜクラスはクラスとして書き込み可能である必要がありますか?また、すべてのサブクラスと同様に、親クラス( 'dict')を使用するコードはサブクラスのメソッドを取得しません。 –

+0

@yoyo_fun辞書オブジェクトソースはC言語で書かれています(標準のCPythonの場合)。ソースコード[ここ](https://github.com/python/cpython/blob/master/Objects/dictobject.c)を見ることができます。 –

3

辞書をデータメンバーのみを含み、メソッドを持たないC++のオブジェクトと比較するのは正しいですか? なし

辞書は、実装が異なる可能性がありますが、std::unordered_mapに類似したデータ構造です。

オブジェクトは、クラスのインスタンスです。この答えの範囲外の違いがあるものの、C++とPythonはどちらもObject Orientedプログラミングを大部分サポートしています。オフコースは、PythonとC++の両方で、dictまたはstd::unordered_mapのいずれかがメソッドとデータメンバーを持つクラスとして実装されています。

でも、dictは、<type 'type'>を継承するタイプです。 Pythonではすべてがオブジェクトであり、たとえクラスや関数であっても、Pythonの世界ではオブジェクトについて話すのはあまりにも口語的です。

関連する問題