質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

480閲覧

python,object指向,学習,本

fjhfhheavnffrqi

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/12/20 11:12

プログラミング初心者のものです。最近pythonについての最初の本、Cory Althoffの独学プログラマーを読み終えました。とても良い本だったのですが、object指向プログラミングについてまだまだ理解できておらず、クラス単位で書かれたコードが理解できないことがほとんどです。特に必須な引数と習った"self"については、どのような効果があるのか、つけなければいけない場合、そうでない場合の判別ができません。複数のクラスで構成されるプログラムでは、他のクラスでも同様に"self"を用いるのに、混同されることが無いのはなぜなのかもわかりません。もしPythonでobject指向のパラダイムについて知識を得られる良い本があればぜひ教えてくださいと思っております。また、上記の疑問について、あるいはそれ以外の点についてでも、アドバイスをいただけると大変うれしいです。どうかよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2020/12/20 15:50

selfを書かない他の言語でオブジェクト指向学んだ方が良いかもしれない
guest

回答2

0

ベストアンサー

私は35年ほど前からオブジェクト指向に関わり、C++、Smalltalk、common lisp、perl、pythonなど様々なオブジェクト指向言語を使ってきました。
私からのアドバイスは3点です。違う意見もあると思いますが、参考にしてください。

  1. 現在のオブジェクト指向言語はSimula系(C++、JAVA、C#など)とSmalltalk系(python、ruby、perl5など)に大別できます。この二つの系列は方向性がかなり違うので、一方が分かったとしてももう一方が分かったとは思わないことです。
  2. オブジェクト指向言語を使うとオブジェクト指向プログラミングはやりやすいが、必須ではありません。C言語などの手続き指向言語でも、オブジェクト指向プログラミングは可能です。
  3. オブジェクト指向を身につけるには、集合論をしっかりとやっておくことをお勧めします。動物の中にほ乳類やは虫類があり、ほ乳類の中にはサルやネコやイヌがいます。これらは集合です。オブジェクト指向言語では、ほ乳類やイヌのような集合をクラスと呼ぶことが多いです。イヌのはほ乳類の派生クラスとかサブクラスと呼びます。渋谷のハチ公はイヌという集合の要素です。ハチ公のようなものをイヌのクラスのインスタンスと呼びます。と言うようなことからオブジェクト指向を理解していってください。

投稿2020/12/20 14:46

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fjhfhheavnffrqi

2020/12/22 14:09

経験豊富な方から回答いただき大変ありがとうございます。pythonがobject指向が使いやすい言語だということ、C++、JAVAなどはまた別な理解をする努力が必要であることを教えて下さり感謝です。自分はプログラミング初心者の域をまだ出ないと思っております。ですので、評判の良いpythonをまず1つ選んで学び、pythonを使うことにおいてレベルアップしていければと考えています。その中で、object指向でコーディングできるようになることが重要と考え、理解を深めたいと考えました。その過程で、教えていただいたような集合にも注意して学んでいこうと思います。回答大変ありがとうございました、これからもまた質問をさせていただくと思いますので、よろしければアドバイスなどいただきたいです。
ppaul

2020/12/23 09:52

どのプログラミング言語にも個性があります。その違いを嫌がる人もいるようですが、違いを楽しめるようになると楽しくなってきますよ。 がんばってください。
guest

0

self についてだけ。

class内の関数は、呼び出されるときに、そのクラスのインスタンウそのものが第一引数として強制的に指定されることになっています。
そのときの仮引数の名前をselfにする決まりになっているだけで、selfに特に他の引数との違いがあるわけではありません。

そして、関数の引数は、その関数の中だけで有向な変数なので、別の関数で同じ引数を使っていても混同することはありません。

python

1def add(x, y): 2 return x + y 3 4def sub(x, y}: 5 return x - y 6 7print(add(2, 3)) 8print(sub(7, 5)) 9

このadd 関数と、sub関数の中で使っているx と yは同じ名前ですが、それぞれ別の関数内でのみ有効なので、混同されることはなく、正しく計算できます。

投稿2020/12/20 13:43

TakaiY

総合スコア12830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fjhfhheavnffrqi

2020/12/22 14:13

selfそのものに意味は無いんですね、便宜上つけているものなのだと分かりました。また分かりやすい例を示していただき大変ありがとうございます、selfが各クラスでのみ有効だから混同しないのですね!回答いただき大変ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問