Python3 SQLAlchemy является ли класс моделью

Есть некая базовая модель, от которой я наследую другие модели.

base_model.py

class BaseModel:
    # def __dict__(self): # Eh, I can't redeclare the __dict__
    #     pass

    def get_dict(self):
        if not issubclass(self.__class__, DeclarativeMeta):
            raise TypeError("Not a sqlaclhemy based")

        _vars = vars(getattr(self, '_sa_instance_state').object)
        for x in list(_vars):
            if x.startswith('_') or callable(getattr(self, x)) or x == 'metadata':
                _vars.pop(x)
            if isinstance(getattr(self, x), BaseModel):
                _vars[x] = getattr(self, x).get_dict()

        return _vars

Также модель:

purchase.py

class Purchase(Base, BaseModel):
    __tablename__ = 'purchases'

    id = Column(Integer, primary_key=True, autoincrement=True)
    ...

Где Base есть:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

Я хочу проверить в методе класса BaseModel является ли класс наследник наследником Base, ну а конкретно если исходить из кода SQLAlchemy, то:

from sqlalchemy.ext.declarative import DeclarativeMeta

Ибо из функции declarative_base() мне возвращается:

return metaclass(name, bases, class_dict)

Метакласс, который является:

def declarative_base(
    ... ,
    metaclass=DeclarativeMeta,
):

И если делать

 if not issubclass(self.__class__, DeclarativeMeta):
     raise TypeError("Not a sqlaclhemy based")

То TypeError выскакивает в любом случае.

ТО-ЕСТЬ:

Я хочу запретить наследоваться от BaseModel тем классам, которые не наследуют SQLAlchemy-вский Base.

Еще больше упрощаем:

class A:
   def check(self):
       print(issubclass(self.__class__, B))

class B:
    pass

class C(A,B):
    pass

C().check()  # True

А у меня почему-то при таком же раскладе, только с моделями и блэкджеком прилетает False


Ответы (0 шт):