dict
のサブクラスを作成しています。これは文字列キーから任意の型の値にマップします。キーが正規表現である場合、キーは別々に格納され、照会されます。Python継承:オーバーライドされていないメソッドが呼び出されたときのエラーの発生
class RegexDict(dict):
def __init__(self):
super().__init__() # non-regex keys in the parent class
self.regex_dict = {} # regex keys in the child class
def __getitem__(self, key):
try:
return super().__getitem__(key)
except KeyError:
for x in self.regex_dict:
if re.fullmatch(x, key):
return self.regex_dict[x]
raise KeyError(key)
def __setitem__(self, key, value):
key, is_regex = key
if is_regex:
self.regex_dict[key] = value
else:
super().__setitem__(key, value)
このクラスは(私は、継承を使用する必要が理由である)他のライブラリで使用されますので、私は、基本クラス内の非オーバーライドされたメソッドが呼び出されたときにエラーが発生することを確認します。私はこれをどのようにするべきですか?
悲しいことに、私の経験から、* MutableMapping *は、* pandas *のような主流の場合でも、多くのlibsでは十分ではありません。さらに、これらの方法は、OPのニーズに反しているように見えます。 – pacholik
これは本当に理想的なケースですが、クラスを 'pandas'で動作させる必要があります。内部的には、 'pandas'は' np.dtype() 'を呼び出しますが、残念ながらカスタム型とは互換性がありません。 –