I’m using SQLAlchemy, and many classes in my object model have the same two attributes: id and (integer & primary key), and name (a string). I’m trying to avoid declaring them in every class like so:
class C1(declarative_base()):
id = Column(Integer, primary_key = True)
name = Column(String)
#...
class C2(declarative_base()):
id = Column(Integer, primary_key = True)
name = Column(String)
#...
What’s a good way to do that? I tried using metaclasses but it didn’t work yet.
You could factor out your common attributes into a mixin class, and multiply inherit it alongside
declarative_base():EDIT: You might think this would result in
C1andC2sharing the sameColumnobjects, but as noted in the SQLAlchemy docs, Column objects are copied when originating from a mixin class. I’ve updated the code sample to demonstrate this behavior.