pande
[讀書學習] 《實戰Python Flask開發》
第2章2.4節「操作資料庫」書本範例內文,做理解,延伸學習。與Gemini AI 2.0實驗版互動,做「python學習討教」心得記錄。

1.執行類別Class建構子做模組功能初始化

2.匯入模組可以重載運算子功能

3.從套件(資料夾_ _init_ _ .py)其他模組(.py)中匯入物件實例

4.類別Class的屬性裝飾器property(屬性方法.getter、.setter和.deleter)

AI對話 Gemini
pande
pande
[1.執行類別Class建構子做模組功能初始化]

from flask_migrate import Migrate
(略)
Migrate(app, db)

python的程式語法,import該函式庫之後,沒有實體化,直接使用"Migrate(app, db)"(類型?),是正常用法嗎?
pande
Gemini:

4. 總結
Migrate(app, db) 這種用法是 Python 中很常見的模式,它表示呼叫 Migrate 類別的建構子來初始化 Flask-Migrate。雖然它看起來像實體化,但更重要的是它執行了必要的初始化工作。在 Python 中,import 之後可以直接使用的東西有很多種,不只有單純的「實體化」。
pande
[2.匯入模組可以重載運算子功能]

from pathlib import Path
(略)
(略) f"sqlite:///{Path(file).parent.parent / 'local.sqlite'}"

三個概念
.f字串的{ }替換
.Path( )回傳pathlib模組的path物件
./ 本義是除法運算子,這裡被加載新的功能
pande
Gemini:

/ 運算子的運作並非來自 f 字串,而是來自 pathlib 模組的 Path 類別。f 字串只是用來將 Path 物件轉換成字串,以便組合成完整的資料庫 URI。

讓我更詳細地說明:

1. pathlib 模組的 / 運算子

在 pathlib 模組中,Path 物件重載了 / 運算子,使其可以用來連接路徑。這使得路徑操作更加直觀和簡潔。』

(略)

/ 運算子作用在 Path 物件之間,產生新的 Path 物件。

(略)

總結

/ 運算子是 pathlib 模組中 Path 類別的功能,用於連接路徑,產生新的 Path 物件。』
pande
[3.從套件(資料夾_ _init_ _ .py)其他模組(.py)中匯入物件實例]

from apps.app import db
# 建立繼承db.Model的User類別
class User(db.Model):
(略)

三、請問這邊"from apps.app import db"的用法正常嗎?為什麼可以從其他.py程式中匯入物件實體?
pande
Gemini:
『(略) 這種用法完全正常,而且是 Python 中常見的模組化程式設計方式。

讓我來詳細解釋:

1. Python 的模組和套件

模組(Module): 一個 .py 檔案就是一個模組。模組可以包含變數、函式、類別等等。
套件(Package): 一個包含__init__.py 檔案的資料夾就是一個套件。套件可以用來組織多個模組,形成一個更大的程式庫。

在你的例子中:(略)

2. import 的運作方式 (略)

(略)

總結

from apps.app import db 這種用法是完全正常的。它利用 Python 的模組和套件系統,將 SQLAlchemy 物件實例集中管理,並在需要的地方匯入使用。這是一種良好的程式設計模式,可以提高程式碼的可讀性、可維護性和可重用性。』
pande
這裡讓我釐清了當初接觸過的
python的「模組套件」觀念
-套件裡的不同模組可以互相匯入物件實例

解惑了 系統性組織性理解了(敬
pande
[4.類別Class的屬性裝飾器property]

class User(db.Model):
. (略)
. @property
. def password(self):
. (略)
. @password.setter
. def password(self, password):
. (略)

請問"@property"和"@password.setter"這兩段在做什麼?
請幫我詳細說明python運作。
pande
Gemini:

(略)

總結

@property 和 @password.setter 是一種在 Python 中實現屬性機制的強大工具,特別適用於處理需要特殊存取控制的屬性,例如密碼。在你的程式碼中,它們確保了密碼的安全性,這是一個非常重要的實踐。
pande
問:
『Python的裝飾器@是配合function或class使用的,可用作裝飾器的func/class都有自己的程式內容。想請問,那麼property、attribute.setter、attribute.deleter有自己的程式內容嗎?還是,這3個單純只是語法格式寫法?』
pande
Gemini:

(略) 它們背後都有程式碼在運作,並非只是單純的語法糖,雖然它們的確簡化了程式碼的撰寫方式。

(略)

5. 總結

@property、@attribute.setter 和 @attribute.deleter 並非只是單純的語法格式。它們背後有 property 類別及其相關方法在運作,負責處理屬性的行為。裝飾器提供了一種更簡潔的語法來使用 property 類別,並擴展了其功能。它們是 Python 中強大且常用的特性,用於實現封裝和控制物件的屬性存取。
pande
載入新的回覆