初めに結論
メソッドにselfをつけると元のクラスのインスタンスにアクセスできます.
.py
hoge_class = hoge_method.__self__ # メソッドから元のクラスを取得
使用場面(というか自分の例)
まず大体こんな感じのクラスを定義します.
file2.py
class hoge_class_origin:
def __init__(self):
self.class_variables = None
def variable_checker(self):
print(self.class_variables)
以下の様に関数にメソッドのみを渡した場合,クラスの実体?がスコープ内に無いので安直なクラス名.変数名でのアクセスができません.
file1.py
import file2
def hoge_executer(given_method):
# ここでgiven_methodが定義されているhoge_class_instance内のクラス変数にアクセスしたい.
# けどクラスの実体がない.
got_hoge_class = given_method.__self__ # __self__でクラスを参照
got_hoge_class.class_variables = 777
given_method.variable_checker() # 777が表示される
hoge_class_instance = file2.hoge_class_origin() # クラスのインスタンスを生成
hoge_method = hoge_class_instance.variable_checker # メソッドを変数に代入
hoge_executer(hoge_method) # メソッドのみを関数に渡す.
こんな感じで外部のクラスなどに渡すオブジェクトを間違えても後から尻ぬぐい出来ますよ~って使い方でした.
本来の用途ではない気がする...
参考:https://docs.python.org/3/library/inspect.html
謝罪とあとがき
Pythonは完全に我流で習得したため正直なところメソッドやらクラスやらの単語の使い方が合っているかはわかりません...sorry...