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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

3233閲覧

pythonのselfが理解できないので 役割を知りたいです

blendegg

総合スコア81

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/02 10:32

###疑問
pythonのselfが理解できません。
selfはクラスのインスタンスということですよね。
なぜ理解できないのか考えたのですが、やはり必要性が分からないからだと思います。
以下のコードの場合、インスタンス化するときに引数を設定することで、インスタンス変数に値を入れられると思います。
でもこういう仕組みって、selfなしでもできるんじゃないのですか?
自分では思いつきませんが、、、

どういう場合に必要になるんでしょうか?
理解力がないのでものすごくシンプルな例で教えてもらえると助かります

###コード

python

1class vector2(): 2 def __init__(self , age): 3 self.value_age = age #インスタンス変数 4 5person_a = vector2("50歳") 6person_b = vector2("10歳") 7print(person_a.value_age , person_b.value_age)

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

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

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

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

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

Lhankor_Mhy

2019/05/02 11:01

補足願います。 ご意見は 「クラスは必要ない」でしょうか、それとも 「クラスは必要だが、self は必要ない」でしょうか。
guest

回答4

0

ベストアンサー

オブジェクト指向がわからないのか、オブジェクト指向は理解しているけどselfを書く理由がわからないのかをまず明確にする必要があると感じます。

前者の場合。

  • 「オブジェクト指向」で検索して最初のページに出てくるものをすべて読みましょう。

後者の場合。

  • 「python self」で検索して以下略。

その上で、「たとえばこの記事にはこう書いてあるが、この部分はわかるけど、この部分についてはどういう意味なのかわからない」という感じで質問すると捗るでしょう。

投稿2019/05/02 12:21

hayataka2049

総合スコア30933

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

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

0

Pythonのクラス内で定義されているメソッドの第一引数をselfにする文法的な理由であれば、
このリンク先のraccyさんの回答が参考になるでしょう。

投稿2019/05/02 14:11

sin_250

総合スコア112

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

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

0

でもこういう仕組みって、selfなしでもできるんじゃないのですか?

自分では思いつきませんが、、、

例えばRubyだと同じコードは、

Ruby

1class Vector2 2 def initialize(age) 3 @age = age #インスタンス変数 4 end 5 def age #インスタンス変数の値を返すメソッド 6 @age 7 end 8end 9 10person_a = Vector2.new("50歳") 11person_b = Vector2.new("10歳") 12puts person_a.age , person_b.age

と、selfを使わずに書けますが、そういうことですか?
Rubyでは「インスタンス変数」を表すために@という記号を使っています。
もちろん、selfと書く必要がある場面もあります。

投稿2019/05/02 11:37

otn

総合スコア84499

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

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

0

クラスの中に複数のインスタンスメソッドを定義した際に、どのインスタンスメソッドからも呼び出せる変数が欲しければ、ご提示されたようなインスタンス変数で簡単に実現できます。

 開発しているシステムの規模が大きくなると、少しずつ必要性が実感できるようになる気がします。

python

1class vector2(): 2 def __init__(self , age): 3 self.value_age = age #インスタンス変数 4 5 def raw_print(self): 6 print(self.value_age) 7 8 def print_with_parentheses(self): 9 print('[{}]'.format(self.value_age)) 10 11person_a = vector2("50歳") 12person_b = vector2("10歳") 13 14person_a.raw_print() 15person_a.print_with_parentheses() 16 17person_b.raw_print() 18person_b.print_with_parentheses()

投稿2019/05/02 10:40

siruku6

総合スコア1382

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

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

blendegg

2019/05/02 11:34

例えばゲームのキャラクターで説明はできないでしょうか warriorクラスがあったとして、インスタンス変数はゲーム内でどういったものでしょうか?インスタンス変数が力(力100として)で、その力をもとにした関数を別に作るというような?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問