Скажем, у меня есть файл json, похожий на:
{
"foo": ["hi", "there"],
"bar": ["nothing"]
}
Я хотел бы создать абстрактный базовый класс (ABC), где имена абстрактных методов являются ключами json выше, т.е. :
from abc import ABCMeta, abstractmethod
class MyABC(metaclass=ABCMeta):
@abstractmethod
def foo(self):
pass
@abstractmethod
def bar(self):
pass
Проблема в том, что файл json на самом деле имеет много ключей. Интересно, есть ли что-то вроде:
import json
with open("the_json.json") as f:
the_json = json.load(f)
class MyABC(metaclass=ABCMeta):
# for k in the_json.keys():
# create abstract method k
Спасибо за предложения из комментариев, но почему-то все работает не так, как ожидалось. Вот что я попробовал:
class MyABC(metaclass=ABCMeta):
pass
def f(self):
pass
setattr(MyABC, "foo", abstractmethod(f))
# I also tried
# setattr(MyABC, "foo", abstractmethod(lambda self: ...))
# Try to define another class that inherits MyABC
class MyClass(MyABC):
pass
c = MyClass()
# Now this should trigger TypeError but it doesn't
# I can even call c.foo() without getting any errors