Skip to content

Instantly share code, notes, and snippets.

@kohnakagawa
Created July 10, 2016 06:48
Show Gist options
  • Save kohnakagawa/b0d99af9a949efa9e98b6a0a60b488a3 to your computer and use it in GitHub Desktop.
Save kohnakagawa/b0d99af9a949efa9e98b6a0a60b488a3 to your computer and use it in GitHub Desktop.
#!/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()
@kohnakagawa
Copy link
Author

pythonでは、クラス内で定義されるメソッドと普通に定義される関数に違いがないようにしている。
そのため、第一引数にクラスのインスタンスを渡すように関数を定義する(そうでないとクラスの実態に触ることができない。)。

pythonでは関数は第一級オブジェクトとして取り扱うようにできている(pythonはマルチパラダイム言語であり、関数型言語としての側面も持つ。)。
他のオブジェクト指向言語とは違いmethodですらメンバ変数として扱っていると考えるのがよいのか?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment