進捗

3/8 13:15~15:30 p.291~p.292

__iter__(self)メソッドのブロックにreturn selfを書くのは呼び出した時にインスタンス自体をイテレータとして返す必要があるから。

__next__(self)メソッドでは引数が一つ。呼び出す一連の流れはインスタンスiter関数の引数に代入し、またnext関数の引数に代入する。変数の名は変わるもののこの流れから別々のものではないとみなす。

__contains__(self,element)を学ぶ際にこのサイトだけではなくこちらも見て学習した。


class Contains:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __contains__(self,param1):
        if param1 in  self.__dict__.keys():
            return True 
        else:
             return False
"""
書き換えたが、__contains__のメソッド部分はインデント以下、下記のようにサイトでは書いてある。
return True if param1 in self.__dict__.keys() else False """ self.__dict__.keys()はドキュメントにあるように__dict__が特殊属性でオブジェクトの属性を保存するために辞書の形を与えている。keys()はオブジェクト指向のメソッドでで辞書型に付いてキーを得るもの。またself.name.__dict__.keys()はできない。self.nameのstr型には__dict__がつかないから。 """ #表示 p = Contains('大島',37) print('名前は入力されているか','name' in p) #メソッドの呼び出しはinの使用で行われる。 p.__dict__ #結果 名前は入力されているか True {'name': '大島', 'age': 37}

for key in p.__dict__.keys():
    print(key)
    
#結果
name      #self.name = '大島' アトリビュート部分のnameがキーになり、大島が値になる。
age