Zenn
Closed28

学習記録_2025

ホヴィンチホヴィンチ

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

ホヴィンチホヴィンチ

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"

https://x.com/myapdx/status/1891751817194897871

ホヴィンチホヴィンチ

今日やること:
・03の課題を全部確認
・ex00を終わらす

やったこと:
・python絵本を発見
・ピリオド。キャレットなどの名前を学んだ。
https://developer.so-tech.co.jp/entry/2022/09/26/113112#ピリオド

明日やること:
・03の課題を全部確認
・pythonの本を全部読む。:特にクラスの所。
https://www.notion.so/hovinci/Python-Python-9-Amazon-07bf30c2f50e4f22bde9c9e6543ebe07
https://www.notion.so/hovinci/Piscines-Python-0c79a2b7aff245439aa044dc584aa359

ホヴィンチホヴィンチ

今日やったこと
・ex00の課題を読む
・ex01のコードを眺める

次回やること
・ex00の、Charactorのdieを、falseに変えるように実装する。=> 多分問題ないはず。

ホヴィンチホヴィンチ

今日やったこと
・ex00の、Charactorのdieを、falseに変えるように実装する。=> 多分問題ないはず。

次回やること
・ex01に、ex00のファイルを移動。ex01のファイルの書き換え。dieを消す。

ホヴィンチホヴィンチ

今日やったこと
・ex01のファイルの書き換え

次回やること
str と__repr___ の違いがいまいち分からん。そして、__str__を出力しても、__repr__が出力される
・他の人の回答を見る。

ホヴィンチホヴィンチ

今日やったこと
・str と__repr___ の違い:

  1. __str__ : 人間が読みやすい形式でオブジェクトを表現するためのメソッド
  2. __repr__ : 開発者向けの、より技術的で正確なオブジェクト表現を提供するメソッド
  • __str__: エンドユーザー向け。print()関数やstr()関数で使用される
  • __repr__: デバッグや開発者向け。インタラクティブシェルでの表示やデバッグ時に使用される

ちなみに、print(Robert.str) という行では、str メソッドを 呼び出して いないため、メソッド自体のオブジェクト参照が出力されています。メソッドを呼び出すには括弧 () が必要です。

次回やること
・ex01:__str__を出力しても、__repr__が出力される。。なぜ?->AIにソースコードを渡してみてもらう

__str__を出力しても__repr__が出力される理由

これは「フォールバック」メカニズムによるものです。オブジェクトに__str__メソッドが定義されていない場合、Pythonは自動的に__repr__メソッドを使用します。つまり:

  1. print(obj)str(obj)を実行するとき、Pythonは最初にobj.__str__()を呼び出そうとします
  2. __str__メソッドが定義されていない場合、代わりにobj.__repr__()を使用します

現在の出力の説明
<bound method Baratheon.str of Vector: ('Baratheon', 'brown', 'dark')> という出力は:

Baratheon.str がバインドされたメソッドオブジェクトであることを示しています
of Vector: ('Baratheon', 'brown', 'dark') の部分は、そのメソッドがバインドされているオブジェクトの repr の結果です

これはメソッド自体の表現であり、メソッドを呼び出した結果ではありません。

  1. print(Robert.__str__)__str__メソッド自体(呼び出しではない)を表示
  2. 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__) を実行すると:

  1. Robert.__str__ はメソッドオブジェクトを参照
  2. このメソッドオブジェクトを文字列に変換するとき、Pythonは「これはRobertオブジェクトにバインドされたメソッドです」と表現しようとする
  3. Robert オブジェクト自体を表現するために、Pythonは Robert.__repr__() を呼び出す
  4. その結果、<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_methodobj にバインド(紐付け)されている」状態のメソッドオブジェクトを生成します。このオブジェクトは「バインドメソッド」と呼ばれます。

バインドメソッドの特徴

  1. 自動的に self が渡される: obj.some_method(arg) を呼び出すと、内部的には Example.some_method(obj, arg) のように obj が自動的に self として渡されます。

  2. 定義と実行の分離: obj.some_method はメソッド自体を参照し、obj.some_method() は実行を意味します。

  3. オブジェクトの状態へのアクセス: バインドメソッドは、バインドされているオブジェクトの状態(属性)にアクセスできます。

バインドメソッドの表示

バインドメソッドを 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クラスの中身の確認

  1. Joffrey.set_eyes()を呼び出した時点で、Pythonはメソッド定義と照らし合わせて必要な引数が揃っているかをチェックします
  2. 必須引数colorがないと判断された時点で、メソッド本体のコードが実行される前にTypeErrorが投げられます

次回やること
・ex03の問題を読む

ホヴィンチホヴィンチ

今日やったこと
・ex03,4の問題を読む
・@staticmethondについてzenn記事を書く

次回やること
・zip()についてZenn記事を書く

Pythonの@staticmethodについて、中学生にもわかるように、ステップバイステップで説明して。

ホヴィンチホヴィンチ

今日やったこと
・zip()とリスト内表表示についてZenn記事を書く

次回やること
・04の課題を読む
・04のメモを記事にする。

ホヴィンチホヴィンチ

今日やったこと
・記事を書いた
https://zenn.dev/hovinci/articles/301bd502bed2d4

次回やること
・【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の課題を読む

次回やること
・コードのチェック
・知りたいことの洗い出し

次回やること

このスクラップは2ヶ月前にクローズされました
作成者以外のコメントは許可されていません