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

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

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

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

Q&A

3回答

460閲覧

pythonのselfに関して

k.lolo

総合スコア4

Python 3.x

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

0グッド

0クリップ

投稿2022/05/25 18:13

現在pythonを勉強中の者です。
以下のコードに関して質問なのですが、selfにs1が代入されるという認識で間違いないのでしょうか?よろしくお願いいたします。

コード class Student: def __init__(self, idnum, name): self.idnum = idnum self.name = name def __str__(self): return f'{self.name}({self.idnum})' def idnumber(self): return self.idnum s1 = Student(1234567, "学生 一人目") print(s1.idnumber())

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

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

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

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

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

guest

回答3

0

selfにs1が代入される

「代入」よりは bind(束縛)と表現される場合が多い様です。

id 関数を使ってインスタンスのメモリアドレスを表示してみます。

python

1>>> help(id) 2Help on built-in function id in module builtins: 3 4id(obj, /) 5 Return the identity of an object. 6 7 This is guaranteed to be unique among simultaneously existing objects. 8 (CPython uses the object's memory address.)

python

1class Student: 2 : 3 4 def idnumber(self): 5 print(f'{id(self) = }') 6 return self.idnum 7 8s1 = Student(1234567, "学生 一人目") 9print(f'{ id(s1) = }') 10s1.idnumber()

実行結果

python

1 id(s1) = 140051678130912 2id(self) = 140051678130912

s1self のメモリアドレスが一致していることが判ります。つまり、同一のインスタンスです。

投稿2022/05/26 00:49

編集2022/05/26 00:50
melian

総合スコア19618

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

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

0

既に回答ありますが、自分なりの解釈を答えると、selfは作成されたインスタンス自身、つまり今回はs1を指します。
新しくs2をStudent(7654321, "学生 二人目")で作成した場合、selfは自身であるs2を指します。

クラスはあくまで設計図です。
インスタンスが作成されたら最初に__init__関数が実行されますが、そこではインスタンス自身(self)のidnum, name変数に対して値を入れろという設計が書かれています。
実際にStudent(1234567, "学生 一人目")を実行するとこの設計を元にインスタンスが生成されます。

個人的な考え方は以上ですが、ちなみにどのあたり(何行目)を見てselfにs1が代入されるという認識を持ったのでしょうか。
全体的にそんな感じがしているのであればそれでも良いですが。

投稿2022/05/26 00:16

YuuT

総合スコア667

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

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

0

selfにs1が代入される

代入されるってのとは違い、s1と同じものをselfが指している、ってことかと

投稿2022/05/25 21:19

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問