前者はインスタンス変数として、後者はクラス変数として値を管理します。
UX MILK - Pythonのクラス変数とインスタンス変数
簡単に言うと、クラス変数にはクラス名.変数名
でアクセスできます。
Python
1class Hoge:
2 a = None
3
4 def __init__(self):
5 self.b = None
6
7hoge = Hoge()
8Hoge.a # ok
9Hoge.b # ng
10hoge.b # ok
基本的にはインスタンス変数を使い、次のようなときにクラス変数を使うと良いでしょう。
ただし、値を不用意に書き換えてしまわないように注意する必要があります。
例えばJavaのstaticフィールドのような用法です。
便利な場面もありますが、挙動を追いづらくなるデメリットがあります。
また、このようにすでにクラス内の変数の初期値が決まっているときはinitを使わなくてもいいのですか?
(_init_(self, gpa=3)とする必要もないとき)
そのような場合、__init__
を自分で定義しなくてもかまいません。
ただし、__init__
が存在しないわけではありません。
Python
1>>> class Hoge:
2... """中身が空っぽなクラスだよ"""
3... pass
4...
5>>> dir(Hoge)
6['__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__']
7>>> Hoge.__init__ is object.__init__
8True
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/27 07:13
2017/12/27 07:21 編集
2017/12/27 07:23
2017/12/27 08:09