Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回はPythonでよく使われる用語のうち、「クラス」、「インスタンス」、「クラスインスタンス」、「メソッドオブジェクト」という4つの用語の解説です。
まず、「クラス」、「クラスインスタンス」、「インスタンス」という3つの用語の言葉の違いをまとめると、次のようになります。
クラスを書く(書き方:class MyClass:~)
↓
書いたクラスを実行する
↓
そのクラスの、「クラスオブジェクト」ができる
↓
そのクラスオブジェクトを呼び出す(書き方:MyClass())
(この呼び出しのことを、「インスタンス化」とも言う。このとき、クラスが__init__を定義していれば、この__init__も呼び出される)
↓
クラスであるMyClassの「クラスインスタンス」ができる
(「クラスインスタンス」であって、「クラスのインスタンス」ではない)
↓
x = MyClass()
(これは、右辺でクラスオブジェクトを呼び出し、その結果、クラスインスタンスが作成され、そのクラスインスタンスを変数xに代入するという意味)
↓
このxは、「クラスのインスタンス」または「インスタンス」または「インスタンスオブジェクト」と呼ばれるものであって、上述の「クラスインタンス」ではない。
厳密に言えば、そもそもメソッドまたはメソッドオブジェクトとは、
オブジェクトに “属している” 関数
公式ドキュメント:インスタンスオブジェクト
のことです。
そしてPythonプログラムにけるデータはほぼなんでもかんでもオブジェクトという仕組みになっているので、乱暴にいってしまえば、関数ならばなんでもかんでもメソッドまたはメソッドオブジェクトとも言えそうです。
しかし、公式ドキュメント上でも特に明示されている場合を除いては、
クラスのインスタンスオブジェクトのメソッドだけを意味するもの
公式ドキュメント:インスタンスオブジェクト
とされていることもあります。
もし仮に「クラスのインスタンスオブジェクトのメソッドだけを意味するもの」というこの方針に従うのならば、次のコードの場合は、
class MyClass:
(略)
def f(self, ~):
(略)
(略)
my_instance = MyClass()
MyClass.f
my_instance.f
my_instance.f()
MyClass.f | 関数オブジェクトであってメソッドオブジェクトではない |
my_instance.f | メソッドオブジェクト |
my_instance.f() | メソッドオブジェクトの呼び出し |
このような用語の使い分けとなります。
しかしこれはあくまで上述のような「クラスのインスタンスオブジェクトのメソッドだけを意味するもの」という方針に従った場合の使い分けになりますし、そもそもその方針を採用するかどうかは時と場合によります。公式ドキュメントでも解説の便宜上その方針をその場面で採用しているだけでしょう。そのような方針を採用しないことが絶対に間違いというわけではないでしょう。
プログラミング学習はどうしてもわかりにくく時間がかかります。そこでできるだけ早く効率的に学習する方法として動画学習をおすすめします。次の記事ではおすすめ動画を5つ紹介していますので参考にしてください。