亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當使用 Flask-SQLAlchemy 的類聲明模型時,為什么列變量不需要“self.”?

當使用 Flask-SQLAlchemy 的類聲明模型時,為什么列變量不需要“self.”?

一只甜甜圈 2023-06-27 18:24:23
例如:class User(db.Model):? ? id = db.Column(db.Integer, primary_key=True)? ? username = db.Column(db.String(80), unique=True, nullable=False)? ? email = db.Column(db.String(120), unique=True, nullable=False)? ? def __repr__(self):? ? ? ? return '<User %r>' % self.username我對 python 類還是新手,所以如果這是一個基本問題,我深表歉意。
查看完整描述

1 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

這就是 Flask-SQLAlchemy 元編程。班級級別的分配定義了一個模式。創建類的實例時,它們包含某種訪問器,以便對相同名稱的引用會self從列中生成特定值。這是可行的,因為 sqlalchemy 編寫了大量代碼來實現它。


這不是普通的 python 類的工作方式。您不需要在常規 Python 類的類級別定義屬性。對于常規類,訪問檢查self.bar“bar”是否是實例本地的,然后檢查該類上是否存在“bar”。它就像一個后備方案,但并不需要有一個。無論哪種情況,設置self.bar都會在實例中創建有效的設置。如:


>>> class Foo:

...     bar = 1

...     def get_bar(self):

...             return self.bar

...     def set_bar(self, val):

...             self.bar = val

... 

>>> foo = Foo()

>>> print(Foo.bar, foo.bar, foo.get_bar())

1 1 1

>>> foo.set_bar(999)

>>> print(Foo.bar, foo.bar, foo.get_bar())

1 999 999

在學習 Python 時,sqlalchemy、numpy 和 pandas 等模塊背后的魔力可能會讓人們對該語言的工作原理產生錯誤的印象。


查看完整回答
反對 回復 2023-06-27
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號