0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python メソッドから元クラスのインスタンス取得

Posted at

初めに結論

メソッドに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...

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?