używać: Python 2.6 i SQLAlchemy 0.6.1Jak zdefiniować metaklasa dla klasy, która rozciąga się od sqlalchemy deklaratywnej bazy
To, co próbuję zrobić:
from sqlalchemy.types import (
Integer,
String,
Boolean
)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class SampleMeta(type):
def __new__(cls, name, bases, attrs):
attrs.update({ 'id': Column('Id', Integer, primary_key=True),
'name': Column('Name', String),
'description': Column('Description', String),
'is_active': Column('IsActive', Boolean)
})
return super(SampleMeta, cls).__new__(cls, name, bases, attrs)
class Sample(Base):
__tablename__ = 'Sample'
__table_args__ = {'useexisting': True}
__metaclass__ = SampleMeta
def __init__(self, id, name, description, is_active):
self.id = id
self.name = name
self.description = description
self.is_active = is_active
def __repr__(self):
return "<(%d, '%s', '%s', %r)>" % (self.id, self.name, self.description, self.isactive)
i błąd I Dostaję to:
TypeError: Error when calling the metaclass bases
metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
teraz, jeśli zrobić to samo powyżej używając
class Sample(object)
zamiast
class Sample(Base)
działa absolutnie w porządku.
Muszę dynamicznie aktualizować atrybuty klasy. Tak więc będę używał dynamicznych atrybutów i nazw kolumn. I potrzebuję powyższego kodu do pracy, aby móc się tam dostać.
Proszę o pomoc
Wielokrotne dziedziczenie .... Genius .... Jak oczekiwano od twórcy sqlalchemy użytkownika. – goFrendiAsgard