学習記録_2025

・lazygit + deltaを使えるようにした。

・学習ノートの検討:これに決めた。決め手は、アクセスのしやすさ。GitHubだと、以下のlearningのREAD.mdを書いてからのほうがいいと思った。
・イイ感じのプロジェクトを見つける:
・ただ、問題があって、時系列で見えないがよくないと思った:時系列は、TIMELINE.mdに分けるか。いいね!
・体系的に学ぶのにピッタリ!というか、学習をマッピングするのにイイ感じ!

スライシングについて復習。だいぶ忘れているな。
あと、keyboardinterruptがどういう原理で動くかを知らないとな。ー>これは次の課題にするか。

Cursor でうまく問題修正できなかったらこのプロンプト試すといい
「問題の原因として考えられるものを5~7つ挙げ、それを1~2つの最も可能性が高い原因に絞り込んでください。その上で、実際のコード修正に進む前に、仮説を検証するためのログを追加してください。」
"Reflect on 5-7 different possible sources of the problem, distill those down to 1-2 most likely sources, and then add logs to validate your assumptions before we move onto implementing the actual code fix"

・keyboardinteruptについて少し学んだ。
・02はほぼ分かった。次は03!

今日やること:
・03の課題を全部確認
・ex00を終わらす
やったこと:
・python絵本を発見
・ピリオド。キャレットなどの名前を学んだ。
明日やること:
・03の課題を全部確認
・pythonの本を全部読む。:特にクラスの所。

今日やったこと
・Notion読む(一部)
・ex00についての理解を深める
次回やること
・ex00のテストでいろいろ遊んでみる。

今日やったこと
・ex00の課題を読む
・ex01のコードを眺める
次回やること
・ex00の、Charactorのdieを、falseに変えるように実装する。=> 多分問題ないはず。

今日やったこと
・ex00の、Charactorのdieを、falseに変えるように実装する。=> 多分問題ないはず。
次回やること
・ex01に、ex00のファイルを移動。ex01のファイルの書き換え。dieを消す。

今日やったこと
・ex01のファイルの書き換え
次回やること
・str と__repr___ の違いがいまいち分からん。そして、__str__を出力しても、__repr__が出力される
・他の人の回答を見る。

今日やったこと
・str と__repr___ の違い:
-
__str__
: 人間が読みやすい形式でオブジェクトを表現するためのメソッド -
__repr__
: 開発者向けの、より技術的で正確なオブジェクト表現を提供するメソッド
-
__str__
: エンドユーザー向け。print()
関数やstr()
関数で使用される -
__repr__
: デバッグや開発者向け。インタラクティブシェルでの表示やデバッグ時に使用される
ちなみに、print(Robert.str) という行では、str メソッドを 呼び出して いないため、メソッド自体のオブジェクト参照が出力されています。メソッドを呼び出すには括弧 () が必要です。
次回やること
・ex01:__str__を出力しても、__repr__が出力される。。なぜ?->AIにソースコードを渡してみてもらう
__str__
を出力しても__repr__
が出力される理由
これは「フォールバック」メカニズムによるものです。オブジェクトに__str__
メソッドが定義されていない場合、Pythonは自動的に__repr__
メソッドを使用します。つまり:
-
print(obj)
やstr(obj)
を実行するとき、Pythonは最初にobj.__str__()
を呼び出そうとします -
__str__
メソッドが定義されていない場合、代わりにobj.__repr__()
を使用します
現在の出力の説明
<bound method Baratheon.str of Vector: ('Baratheon', 'brown', 'dark')> という出力は:
Baratheon.str がバインドされたメソッドオブジェクトであることを示しています
of Vector: ('Baratheon', 'brown', 'dark') の部分は、そのメソッドがバインドされているオブジェクトの repr の結果です
これはメソッド自体の表現であり、メソッドを呼び出した結果ではありません。
-
print(Robert.__str__)
→__str__
メソッド自体(呼び出しではない)を表示 -
print(Robert.__repr__)
→__repr__
メソッド自体(呼び出しではない)を表示
2番目と3番目の出力は、メソッドを呼び出した結果ではなく、メソッドオブジェクト自体を表示しています。メソッドオブジェクトを表示すると、そのメソッドがバインドされているオブジェクトの情報も含まれます。
もし実際にメソッドを呼び出したい場合
print(Robert.__str__()) # "test"が出力される
print(Robert.__repr__()) # "Vector: ('Baratheon', 'brown', 'dark')"が出力される
あるいは、より一般的な書き方:
print(str(Robert)) # __str__()を呼び出す
print(repr(Robert)) # __repr__()を呼び出す
現在の出力は、メソッド自体を参照として表示しているため、それぞれのメソッドがバインドされている対象(Robert)の__repr__
の結果である「Vector: ('Baratheon', 'brown', 'dark')」が含まれています。これはPythonの仕様に則った正常な挙動です。
-
print(Robert.__str__)
- これは__str__
メソッド自体を参照するだけで、メソッドを実行しません。そのため、<bound method Baratheon.__str__ of ...>
のような出力になります。 -
print(Robert.__str__())
- これは__str__
メソッドを実際に呼び出して実行し、そのメソッドが返す文字列を出力します。 -
print(Robert)
- これは最も一般的な方法で、Pythonが内部的にstr(Robert)
を呼び出し、それがRobert.__str__()
を呼び出します。
例:
# __str__メソッドが以下のように定義されているとします
def __str__(self) -> str:
return f"{self.first_name} {self.family_name}, with {self.eyes} eyes and {self.hairs} hair"
# これらは同じ結果になります
print(Robert.__str__()) # メソッドを直接呼び出す
print(str(Robert)) # str()関数を使う
print(Robert) # print()が内部的にstr()を呼び出す
すべて "Robert Baratheon, with brown eyes and dark hair"
という出力になります。
<bound method Baratheon.__str__ of ...>
の ...
の部分には、そのメソッドがバインドされているオブジェクト(この場合は Robert
)の文字列表現が入ります。この文字列表現を生成するために、Pythonは __repr__
メソッドを使用します。
つまり、print(Robert.__str__)
を実行すると:
-
Robert.__str__
はメソッドオブジェクトを参照 - このメソッドオブジェクトを文字列に変換するとき、Pythonは「これは
Robert
オブジェクトにバインドされたメソッドです」と表現しようとする -
Robert
オブジェクト自体を表現するために、PythonはRobert.__repr__()
を呼び出す - その結果、
<bound method Baratheon.__str__ of Vector: ('Baratheon', 'brown', 'dark')>
という出力になる
ここで Vector: ('Baratheon', 'brown', 'dark')
の部分は、あなたの __repr__
メソッドの実装から来ています:
def __repr__(self) -> str:
"""Returns a string representation for debugging purposes."""
return f"Vector: {self.family_name, self.eyes, self.hairs}"
これは正常な挙動です。バインドメソッドを出力するとき、Pythonはそのメソッドがバインドされているオブジェクトを識別するために、そのオブジェクトの __repr__
の結果を使用します。これにより、どのオブジェクトのメソッドであるかを明確にできます。
「バインドされている」というのは、メソッドがどのオブジェクト(インスタンス)に関連付けられているかを表す概念です。Pythonにおけるオブジェクト指向プログラミングの重要な概念です。
バインドメソッドの説明
Pythonでは、クラスにメソッドを定義するとき、最初のパラメータとして通常 self
を使用します。この self
は、そのメソッドを呼び出すオブジェクトインスタンスへの参照です。
class Example:
def some_method(self, arg):
return f"{self.value} and {arg}"
クラスからインスタンスを作成すると:
obj = Example()
obj.value = "hello"
obj.some_method
を参照すると、Pythonは「some_method
が obj
にバインド(紐付け)されている」状態のメソッドオブジェクトを生成します。このオブジェクトは「バインドメソッド」と呼ばれます。
バインドメソッドの特徴
-
自動的に
self
が渡される:obj.some_method(arg)
を呼び出すと、内部的にはExample.some_method(obj, arg)
のようにobj
が自動的にself
として渡されます。 -
定義と実行の分離:
obj.some_method
はメソッド自体を参照し、obj.some_method()
は実行を意味します。 -
オブジェクトの状態へのアクセス: バインドメソッドは、バインドされているオブジェクトの状態(属性)にアクセスできます。
バインドメソッドの表示
バインドメソッドを print()
で表示すると、以下の形式になります:
<bound method クラス名.メソッド名 of オブジェクトの__repr__>
これは「このメソッドは特定のオブジェクトにバインドされており、そのオブジェクトは次のような特徴を持っています」という情報を表示しています。
あなたの例では、Robert.__str__
は Robert
オブジェクトにバインドされた __str__
メソッドを表し、そのオブジェクトは __repr__
メソッドによって Vector: ('Baratheon', 'brown', 'dark')
として表現されています。

次回やること:
上記のをきちんと読む。そして__str__に書くべき情報をまとめる。他の人のをチェックする。

今日やったこと
・クラスメソッドについて:代替コンストラクタ:https://zenn.dev/hovinci/articles/b6c2b2402a61ea
・ex01の改善(_str__のなかみの書き換え)
・基本的に、print(~.str)だと、オブジェクトが呼び出され、__repr__の内容が出力される。
次回やること
・ex02の問題を読む

今日やったこと
・ex02の問題を読む
・ex02のprint(King.mro())を試す。
次回やること
・ex02のKingクラスの中身の確認。

今日やったこと
・ex02のKingクラスの中身の確認
-
Joffrey.set_eyes()
を呼び出した時点で、Pythonはメソッド定義と照らし合わせて必要な引数が揃っているかをチェックします - 必須引数
color
がないと判断された時点で、メソッド本体のコードが実行される前にTypeErrorが投げられます
次回やること
・ex03の問題を読む

今日やったこと
・ex03,4の問題を読む
・@staticmethondについてzenn記事を書く
次回やること
・zip()についてZenn記事を書く
Pythonの@staticmethodについて、中学生にもわかるように、ステップバイステップで説明して。

今日やったこと
・zip()とリスト内表表示についてZenn記事を書く
次回やること
・04の課題を読む
・04のメモを記事にする。

今日やったこと
・記事を書いた
次回やること
・【Python】変動性の指標について記事を書く
・以下について記事を書く
*args:
可変長位置引数と呼ばれます。
関数呼び出し時に、任意の数の引数をタプルとして受け取ることができます。
この場合、*argsには数値のリストが渡されると想定されます。
**kwargs:

今日やったこと
・【Python】変動性の指標について記事を書く
次回やること
・【Python】可変長引数(*args, **kwargs)の使い方を書く
・04 ex00 が正しく実装されているか、それぞれの指標の意味とともに確認
・04 ex00 の「You have to manage the errors.」について、AIに聞きながら改善があればする。

今日やったこと
・【Python】可変長引数(*args, **kwargs)の使い方を書く
次回やること
・04 ex00 argsが空のとき、何が入っているのか?
・条件式、AIに解説してもらう
・04 ex00 が正しく実装されているか、それぞれの指標の意味とともに確認
・04 ex00 の「You have to manage the errors.」について、AIに聞きながら改善があればする。

今日やったこと
・04 ex00 argsが空のとき、何が入っているのか?ー>空のタプル
・条件式、AIに解説してもらう
・ちょっと書き直し
次回やること
・04 ex00 が正しく実装されているか、それぞれの指標の意味とともに確認
・04 ex00 の「You have to manage the errors.」について、それぞれの関数について、AIに聞きながら改善があればする

今日やったこと
・ちょっと関係ないが、どうやってフォロワーを増やすのにデータサイエンスを活用できるかをAIに聞いた。
・いつ42いくのか決めた4月の終わり!1日だけで終わらせる!
次回やること
・04 ex00 が正しく実装されているか、それぞれの指標の意味とともに確認
・04 ex00 の「You have to manage the errors.」について、それぞれの関数について、AIに聞きながら改善があればする

今日やったこと
・04 ex00 が正しく実装されているか、それぞれの指標の意味とともに確認
次回やること
・「n//2とint(n/2)の違いを教えて。」を記事に書く。
・04 ex00のmedianの書き直し。そして続き
・04 ex00 の「You have to manage the errors.」について、それぞれの関数について、AIに聞きながら改善があればする

今日やったこと
・「n//2とint(n/2)の違いを教えて。」を記事に書く。
次回やること
・04 ex00のquartilemのコードをAIに聞く。(あと、求め方について聞く。)
・varについて。

今日やったこと
・quartilesについて調べる(いろいろなやり方があると知る。)
次回やること
・・quartilesの計算方法があっているか確認する。
・【Python】スライス記法(slice notation)について
・varについて。

今日やったこと
・quartilesの計算方法があっているか確認する。計算は合っていたけど、ちょっと変えた。
次回やること
・【Python】スライス記法(slice notation)について
・varについて。

今日やったこと
・【Python】スライス記法(slice notation)について
・varについて。求め方も分かったし、コードも問題なし。
次回やること
・python 04のex01の課題を読む
・コードのチェック
・知りたいことの洗い出し

今日やったこと
・セールに向けて予定の調整
・python 04のex01の課題を読む
次回やること
・コードのチェック
・知りたいことの洗い出し
次回やること