Python初学者の大学生です。
まだまだ勉強中ですが、オブジェクト指向の便利さに、段々と惹かれて勉強しています。
下記についてselfとselfしないプロパティーの違いが正直まだわかっていないのですが、
class Parent: test= 'test' def __init__(self): self.property = 'property' pass pass
上のようなクラスで作成したインスタンスに対して、_init__の以前で読み込んだtestというインスタンス変数?を出力すると、
print(Parent().test) print(Parent().property) >>test >>property
こちら問題なく出力できました。
一方でクラス属性をvars()で出力すると、下記のようにtestは表示されませんでした。
そしてなぜかdir()では出力されました。
print(vars(Parent())) print(dir(Parent())) {'property': 'property'} ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'property', 'test'] # print(test) # >> NameError: name 'test' is not defined
念ため、testはglobal変数になっているのかと思い、出力してみたらやはりこちらクラス内で定義されたインスタンス変数のようです。
こちら、self.varで定義する変数と定義しない違いはなんなのでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。