1

在这段代码中:

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.

它在金字塔的教程中,并且根据赋值运算符在python中不能重载的事实,“name = Column(...)”是否必要?还是我完全错了, name=Column(...) 有什么特殊含义?

4

2 回答 2

2

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

name = Column(...)

正在描述类的成员之一Page(“Page由一个名为 ' name', ... 的字段组成,而

self.name = name

正在将一个特定的实例初始化Page为一个特定的值。(“这Page()有一个名字"framistan")。

于 2013-04-02T19:24:19.310 回答
0

它们没有被初始化两次。每个的第一次出现是定义类属性(并将我做出的有根据的猜测分配给它作为描述符),第二次是将实际实例的属性初始化为给定值。

于 2013-04-02T19:24:32.670 回答