el_dict = {'name':'Hydorogen', 'symbol':'H', 'number':'1'}
class Element():
def __init__(self, name, symbol, number):
self.name = name
self.symbol = symbol
self.number = number
print("インスタンス生成しました")
def check(self):
return vars(self)
hydorogen = Element(**el_dict)
print(hydorogen.check())
このようにすると、
出力
インスタンス生成しました
{'name': 'Hydorogen', 'symbol': 'H', 'number': '1'}
と返ってきます。vars(self)
でselfオブジェクト(正確にはインスタンス変数)の__dict__属性を返します。self
内で使われている変数とその値が分かります。
このように、
hydorogen = Element(**el_dict)``
実行時にself
と呼ばれるインスタンス変数のself.name, self.symbol, self.numberに
それぞれの値を代入しています。
では、selfの__dict__属性を返しています。
本題に移るとname, symbol, number
は関数__init__
内でしか使えないローカル変数なので、他の関数からアクセスできずエラーとなっています。一方、__init__
を呼び出したときにself
に入れた値は、インスタンス化したオブジェクトのどこの関数でも呼び出せます。
ちなみに、__str__()
関数は明示的に呼び出して
el_dict = {'name':'Hydorogen', 'symbol':'H', 'number':'1'}
class Element():
def __init__(self,name,symbol,number):
self.name = name
self.symbol = symbol
self.number = number
def __str__(self, name, symbol, number):
return f"{name}, {symbol}, {number}"
hydorogen = Element(**el_dict )
print(hydorogen.__str__(**el_dict))
このように書く分には動きます。name, symbol, number
は__str__
関数内でローカル変数として使われる訳ですから。