在語言伺服器支援的自動完成無所不在之前,程式碼是否以一種使自動完成變得容易的方式編寫並不重要。像 Sublime 這樣的流行文字編輯器無法充分理解程式碼以提供有意義的建議。程式設計師要么記住其依賴項的命令,要么參考文件。
2024 年,自動完成功能無所不在,但我們的軟體包並不一定能讓它的工作變得簡單。以 Factory Boy 文件中的範例為例:
import factory from datetime import datetime from .models import User class UserFactory(factory.Factory): class Meta: model = User arrival = factory.Faker( 'date_between_dates', date_start=datetime.date(2020, 1, 1), date_end=datetime.date(2020, 5, 31), )
到達屬性呼叫Faker的date_ Between_dates()方法。不幸的是,factory.Faker() 不會告訴您哪些 Faker 方法可用,也不會告訴您選擇 Faker 方法後接受哪些參數。此程式碼削弱了語言伺服器提供的優勢。
您可以透過在factory.LazyFunction()中包裝Faker呼叫來在將Faker與factory_boy一起使用時獲得自動完成功能:
import factory from datetime import datetime from .models import User fake = Faker() class UserFactory(factory.Factory): class Meta: model = User arrival = factory.LazyFunction(lambda: fake.date_between_dates( date_start=datetime.date(2020, 1, 1), date_end=datetime.date(2020, 5, 31), ))
傳遞給factory.LazyFunction()的函數在工廠建立實例時進行評估。我們將 faker 呼叫包裝在 lambda 中,以便可以為其提供參數。您的語言伺服器可以向您顯示 fake.date_ Between_dates() 接受哪些參數。
當 faker 函數不需要任何參數時,設定就會減少。以下是如何將factory.LazyFunction()與Faker的first_name()和last_name()方法一起使用:
import factory from datetime import datetime from .models import User fake = Faker() class UserFactory(factory.Factory): class Meta: model = User first_name = factory.LazyFunction(fake.first_name) last_name = factory.LazyFunction(fake.last_name)
產生的程式碼比使用factory.Faker()時要長一點,但是語言伺服器的幫助對我來說是值得的。沒有它,我可能需要不斷檢查文件。
如果輸入太多,您可以隨時將其別名為更短的內容:
from factory import Factory, LazyFunction as LazyFn from datetime import datetime from .models import User fake = Faker() class UserFactory(Factory): class Meta: model = User first_name = LazyFn(fake.first_name) last_name = LazyFn(fake.last_name)
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3