在PythonSQLAlchemy模型中,为什么有些属性要初始化两次?

在PythonSQLAlchemy模型中,为什么有些属性要初始化两次?,python,sqlalchemy,Python,Sqlalchemy,在这段代码中: class Page(Base): __tablename__ = 'page' id = Column(Integer, primary_key=True) name = Column(Text, unique=True) data = Column(Text) def __init__(self, name, data): self.name = name self.data = data 它是金字塔框架(python框架)中的模型,稍

在这段代码中:

class Page(Base):
  __tablename__ = 'page'
  id = Column(Integer, primary_key=True)
  name = Column(Text, unique=True)
  data = Column(Text)

  def __init__(self, name, data):
    self.name = name
    self.data = data
它是金字塔框架(python框架)中的模型,稍后将由SQLAlchemy使用,名称和数据初始化两次:

name = Column... # First assignments.
self.name = name # Second time assignments.
这在pyramid的教程中,根据python中赋值运算符不能重载的事实,“name=Column(…)”是否必要?
还是我完全错了,name=Column(…)有一些特殊的含义?

外部范围是为了类的利益声明一个字段。内部作用域将对象的字段初始化为特定值

name = Column(...)
正在描述
页面
类的一个成员(“
页面
由名为“
名称
”的字段组成,…”),而


正在将
Page
的一个特定实例初始化为一个特定值。(“this
Page()
的名称为
“framistan”
)。

它们不会被初始化两次。第一种情况是定义class属性(并将我的猜测指定为它的描述符),第二种情况是将实际实例的属性初始化为给定值

self.name = name