私はプロパティとして(ここでは重要ではないラッパーを介して)いくつかの関数をマスクしてオブジェクトに動的に追加しようとしていますが、コード補完とmypyが必要です。Pythonの動的プロパティとmypy
プロパティを動的に(メタクラスまたは単純にコンストラクタを使用して)追加する方法を考えましたが、問題はmypyがそれを拾いません(どちらもIDEはありません)。
回避策の1つは、同じ名前/タイプの属性を定義することですが、このアプローチ(コードが多すぎる、静的な属性セット、繰り返し)が嫌いです。
良い方法がありますか?
class Meta(type):
def __new__(cls, clsname, bases, dct):
def prop(self) -> int:
return 1
inst = super(Meta, cls).__new__(cls, clsname, bases, dct)
inst.dynprop=property(prop)
return inst
class Foo(metaclass=Meta):
dynprop=int #this works, but I don't want it
class Bar(metaclass=Meta):pass
def somefunc(s:str):
print(s)
foo=Foo()
bar=Bar()
somefunc(foo.dynprop) #this is ok
somefunc(bar.dynprop) #meta.py:24: error: "Bar" has no attribute "dynprop"