menu
書いてる野郎
orebike@gmail.com
class Hoge: def __init__(self, a) self.a = a def piyo(self, b) print b
classの部分は
class Hoge():
このように括弧付きで書いてもOK。
作りたいクラス名に続き括弧で継承したいクラス名を続ける
class Hoge(Piyo): def fuga(self, a):
メソッドは通常の関数と同じように作るが、第1引数にかならず self を取るのが Python の特徴
class Hoge: def fuga(self, a):
クラスからインスタンスを生成するには
a = Hoge()
このようにクラス名括弧で生成できる。
コンストラクタは特殊なメソッドで
class Hoge(): def __init__(self, a): self.piyo = a
init
という固定名になっている。 これもメソッド一種なので同様に第1引数に self を取る。
この self は JavaScript の this 同様、まっさらな原始のインスタンスでフニャフニャなので、ここに好きにプロパティを追加することができる。 これが Python のインスタンス初期化機構である。
コンストラクタを作らなければスーパークラスのコンストラクタが暗黙で使用されるのだが、 自分で書いた場合は変数のマッピングはやらないといけないのでそれをやる
class Hoge(Piyo): def __init__(self, a ,b): Piyo.__init__(self, a) self.b = b
このように親クラスのコンストラクタメソッドを名前指定して直接キックする。seflも自前で渡す。
Python のメソッドは頭にアンダーバーを2個つけることで private に指定することができる
class Hoge: def pub(self): print "pub" self.__pri() def __pri(self): print "pri" Hoge().pub() Hoge().__pri() #=> エラー
Python の静的メソッドは Java のアノテーションのような表記で
class Hoge: @staticmethod def piyo(a): return a
このように staticmethod
というキーワードをくっつける
そしてメソッドの第一引数には self を渡さない
使う場合はこのように使う。
print Hoge.piyo("aaa")
クラス変数はこのように書く
class Hoge: hoge = "a"
使う
print Hoge.hoge
自身のインスタンスのメソッド内から使う
class Hoge: hoge = "a" def piyo(self) print self.hoge print Hoge.hoge
self を通じてもアクセスできるし、そのまま直にクラス名から引っ張ってもアクセスできる。