私は python (3.2+) プラグイン ライブラリを作成しており、構成ファイルから自動的に処理されるいくつかの変数を作成する関数を作成したいと考えています。
ユース ケースは次のとおりです (クラス変数)。
class X:
option(y=0)
def __init__(self):
pass
(インスタンス変数):
class Y:
def __init__(self):
option(y=0)
オプションのドラフト コードは次のとおりです。
def option(**kwargs):
frame = inspect.stack()[1][0]
locals_ = frame.f_locals
if locals_ == frame.f_globals:
raise SyntaxError('option() can only be used in a class definition')
if '__module__' in locals_:
# TODO
else:
for name, value in kwargs.items():
if not name in locals_["self"].__class__.__dict__:
setattr(locals_["self"].__class__, name, VirtualOption('_'+name, static=False))
setattr(locals_["self"], '_'+name,value)
オプションがクラス変数として宣言されている場合、最初のケースに問題があります。この関数が使用されたクラスへの参照を何らかの方法で取得することは可能ですか (例ではクラス X へ)?