У меня есть модуль Python, который я использовал на протяжении многих лет для обработки серии текстовых файлов для работы.Теперь у меня есть необходимость хранить некоторую информацию в БД (с использованием SQLAlchemy), но я все же хотел бы гибкость использования модуля без поддержки БД, т.е. не нужно фактически импортировать (или устанавливать) sqlalchemy.На данный момент у меня есть следующее ... и я создавал Product
или DBProduct
и т. Д., В зависимости от того, собираюсь ли я использовать БД или нет.
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Product(object):
pass
class WebSession(Product):
pass
class Malware(WebSession):
pass
class DBProduct(Product, Base):
pass
class DBWebSession(WebSession, DBProduct):
pass
class DBMalware(Malware, DBWebSession):
pass
Однако,Я чувствую, что должен быть более простой / чистый способ сделать это.Я чувствую, что создаю беспорядок наследования и потенциальные проблемы в будущем.В идеале я хотел бы создать один класс Product
, WebSession
и т. Д. (Возможно, с использованием декораторов), который содержит информацию, необходимую для использования БД, но он включается / работает только после вызова чего-то вроде enable_db_support()
.После вызова этой функции, независимо от того, какой объект я создаю, он сам (и все объекты, которые он наследует) включает все привязки столбцов и т. Д. Я должен также отметить, что если я каким-то образом выясню, как включить Product
и DBProduct
в одном классе мне иногда нужны 2 версии одной и той же функции: 1, которая вызывается, если включена поддержка db, и 1, если она не включена.Я также подумал о «воссоздании» иерархии объектов при вызове enable_db_support()
, однако это также оказалось кошмаром.
Любая помощь приветствуется.