前回までの「Python初体験」の続きです。

今回は突然「PythonにおけるObjectとは何か?」というテーマでした。
Objectに関わる記述では、
Pythonでは、...整数や実数、文字列などのデータのことを、オブジェクト(Object) という用語で呼びます。
Pythonでは、Pythonが操作するいろいろな種類のデータやプログラムなどのことを、まとめて オブジェクト と呼びます。
数値などの値のように、変数に代入したり、関数のように関数名を指定したりと、プログラマが名前をつけられるものはオブジェクト、whileのようにつけられないものはオブジェクトではない、と考えると良いと思います。
というようなものが見当たりました。

だから何?

と言われるかもしれませんが、28歳から41年間も趣味でプログラミングをしてきた私には感慨深いものがあります。


ROM BASICの時代では、「プログラムは短ければ善」ということで行区切り(:)をいっぱいつけて「一行プログラム」なんてーのがはやっていました。しかし、何をやっているのかが非常に分かりずらいこと言うまでもありません。そんな「手続き型プログラミング」の中で、

 

「(データ)処理)手続きの構造」が視覚的に直観できるようにするプログラミングを「構造化プログラミング」

 

と呼び、一種のブームになりました。(私も当時Cを学び始め、インデントの重要性を確信していました。→それがPythonでは「ブロック(データ処理の纏まり)」を表す文法としてMUSTになっています。)


その後、C言語が発展して、Object Oriented Programing(略称"OOP"で、英語の"oops"に引っ掛けた?)を実現したC++では、データと構造化の対象となる処理を分別するのでなく、「データ(メンバー変数-後のフィールド)とそれを処理する方法(メンバー関数-後のメソッド)」が一つになったものがオブジェクトとされ、オブジェクトの抽象的な「型」をクラス、それをメモリー上に実体として置いた段階で「オブジェクト」ということを学びました。(

:OOPの特徴である、
(1)カプセル化
(2)抽象化
(3)継承
(4)ポリモーフィズム
等についてはここでは省略します。なお、余談ですがMicrosoft Learnのクラス、オブジェクトの説明はかえって初心者を混乱させてしまうのではないか、と懸念します。Pythonに関わるOOPの説明も、直ぐにプログラミング実務に飛ぶので「プログラマーの世界の住人」でないと俄かには理解しずらいのではないでしょうか?
 

更に、C++にもう二つ++をつけたC#では、クラス、オブジェクトは同様でも、「変数」はDB的に「フィールド」、アクセッサーでget;、set;する「プロパティ」、「関数」は「メソッド」と呼ばれるようになったこと、ご存じの通りです。
 

Pythonにおいては、オブジェクトはクラスやメソッドの概念にとらわれず、「プログラミング上、主語または目的語となるものが(メソッドが規定されていなくても)オブジェクト」と言っているように感じます。(述語がメソッドですか、ね。)

私だったらどう説明するか?A good question!

"例えば、新婚の夫婦がこれからの結婚生活についてプランを立てますよね。例えば「子供」については「男の子」や「女の子」が欲しい、とか、「子供」の「養育」「教育」「しつけ」「(トイレ等生活動作の)訓練」なども話し合うでしょう。実際に子供が生まれて、その子が「太郎」という名をつけ、その子が「食事」し、「成長」し、「学習」し、社会的に活動してゆくわけですが、そういう「主体または客体」と「行動」が一体となった「太郎」がオブジェクトの概念なんです。"

ウ~ン、却って分かりづらかったかも。難しいなぁ。

いずれにしてもPythonの公式文書では「Python公式サイトにあるドキュメント「オブジェクト、値、および型」では、Pythonにおけるオブジェクトとは『データを抽象的に表したもの』と表現されている。つまり、Pythonで書いたプログラムが操作したり、処理したりするデータのことを『オブジェクト』という。」とされているそうですので、今はそんな風に覚えておけばよいですね。