我想在SQLAlchemy之上创建一个自定义接口,以便透明地支持一些预定义的混合属性。在
具体地说,我想创建一个类SpecialColumn
和一个元类,这样当用户添加{Column
,并添加一个混合属性,该属性获取并设置这两个列作为元组。
到目前为止,我的方法是:
首先,我定义了我的特殊列类型:
class SpecialColumn(object):
pass
然后,我定义了一个继承自DeclarativeMeta的元类,它扫描类中的SpecialColumn
实例,并用两个{
最后,我用它构造了一个declarative_base
的实例,让用户用新的基定义类:
MyBase = declarative_base(metaclass=MyDeclarativeMeta)
class MyClass(MyBase):
col1 = SpecialColumn()
col2 = Column(...)
现在回答我的问题: 首先,我的方法正确吗? 其次,如何使用元类添加setter?正确的做法是:
def setter(self, (v1, v2)):
setattr(self, col1_name, v1)
setattr(self, col2_name, v2)
然后简单地做attrs[name].setter(setter)
?在
没有必要为SQLAlchemy映射类使用元类,因为我们提供了大量的events来在类创建和/或映射时向类添加特性。mapper_configured在这里可能很好,如果您使用0.8,则可以直接向
MyBase
申请:请注意,setattr()是实现此目的的最佳方法,简单明了。在
相关问题 更多 >
编程相关推荐