Created
July 10, 2016 06:48
-
-
Save kohnakagawa/b0d99af9a949efa9e98b6a0a60b488a3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/python | |
| # -*- coding: utf-8 -*- | |
| class Hoge(object): | |
| def func(self): | |
| print "func" | |
| hoge = Hoge() | |
| hoge.__dict__ #名前空間内にfuncが見当たらない。 | |
| Hoge.__dict__ #名前空間内にfuncがある。 | |
| """ | |
| funcを呼ぶ時には、まずhogeの名前空間内にfuncが無いかどうかを探す。 | |
| もし、ない場合にはHogeの名前空間に該当する関数が無いかどうかを探しにいく。 | |
| 見つかった場合はその関数が呼ばれる。この時、第一引数には必ずクラスインスタンスが渡されるようになっている。 | |
| """ | |
| hoge.func() | |
| def fuga_self(self): | |
| print "fuga_self" | |
| def fuga(): | |
| print "fuga" | |
| """ | |
| クラスインスタンスに関数を加えることができる。 | |
| 加える関数の引数にselfが無くても関数として呼ぶことができる。 | |
| """ | |
| hoge.fuga = fuga | |
| hoge.fuga() | |
| """ | |
| クラスに関数を加えることができる。 | |
| この場合は加える関数の引数にselfが無いとそもそも呼ぶことができない。 | |
| """ | |
| Hoge.fuga = fuga_self | |
| hoge1 = Hoge() | |
| hoge1.fuga() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
pythonでは、クラス内で定義されるメソッドと普通に定義される関数に違いがないようにしている。
そのため、第一引数にクラスのインスタンスを渡すように関数を定義する(そうでないとクラスの実態に触ることができない。)。
pythonでは関数は第一級オブジェクトとして取り扱うようにできている(pythonはマルチパラダイム言語であり、関数型言語としての側面も持つ。)。
他のオブジェクト指向言語とは違いmethodですらメンバ変数として扱っていると考えるのがよいのか?