【发布时间】:2013-12-21 03:17:04
【问题描述】:
使用继承自 Base 类的 SQLAlchemy 对象,我可以将参数传递给未在构造函数中定义的变量的类:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
name = Column(String(50))
fullname = Column(String(50))
password = Column(String(12))
def __repr__(self):
return "<User(name='%s', fullname='%s', password='%s')>" % (
self.name, self.fullname, self.password)
ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
当然,如果我尝试将这样的参数传递给另一个类,以同样的方式设置类变量,我会得到一个错误:
In [1]: class MyClass(object):
...: i = 2
...:
In [2]: instance = MyClass(i=9)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-6d3ec8445b00> in <module>()
----> 1 instance = MyClass(i=9)
TypeError: object.__new__() takes no parameters
SQLalchemy 在搞什么诡计?他们为什么不直接使用构造函数(即__init__ 方法)?
【问题讨论】:
-
大概 Base 类使用
*args/**kwargs接受任意参数,然后将它们与字段匹配。
标签: python sqlalchemy