インスタンス生成時に代入先の変数名の取得方法
私はPythonの使われている、オープンソースのプログラミング言語の勉強をしています。
Pythonにおいて、生成されるインスタンスの代入先の変数名を文字列で取得したいです。
もし、これを実現する方法や代案が存在すれば教えてほしいです。
コードの例
具体的に実現したいコードを示します
Python
1# 現在のコードはこのようになっています 2class ManualVariableNamed: 3 def __init__(self, name): 4 self.variable_name = name # ここに変数名の文字列を格納したいです 5 6def main(): 7 x = ManualVariableNamed(name='x') # このように文字列を与えることが冗長だと感じます 8 print(x.variable_name) # => 'x' 9 10 11# 次に、実現したいコードの例を示します 12# インスタンス生成時の変数名を自動で取得できるクラスを考えます 13class GetSelfVariableNameClass: 14 def __init__(self): 15 self.variable_name = get_variable_name(self) # 例えばこのような具合です 16 17def main(): 18 y = GetSelfVariableNameClass() 19 print(y.variable_name) # => 'y'
試したこと
現在のスコープの変数名一覧はglobals()
やlocals()
で取得できます。
これを用いてid(self)
と一致する変数を探すことを考えました。
しかし、①代入評価前の変数を、②違うスコープから見つける方法がありません。
イニシャライザの引数で現在のスコープを明示的に与えることはしたくありません。
こちらの記事では Qiita:変数の変数名を文字列で取得する 方法が紹介されています。
しかし、私の実現したい事は、これでは解決できませんでした。
仕様レベルでの話でもいいので、何か少しでもヒントがあれば教えてください。
この実現が不可能であれば、その根拠を教えてもらえると助かります。よろしくおねがいします。
回答4件
あなたの回答
tips
プレビュー