在語言伺服器支援的自動完成無所不在之前,程式碼的編寫方式是否使自動完成變得容易並不重要。像 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), )
arrival屬性呼叫Faker的date_ Between_dates()方法。不幸的是,factory.Faker() 不會告訴您哪些 Faker 方法可用,也不會告訴您選擇 Faker 方法後接受哪些參數。此程式碼削弱了語言伺服器提供的優勢。
透過將 Faker 呼叫包裝在factory.LazyFunction() 中,您可以在將 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)
以上是使用factory_boy時為Faker提供更好的自動完成功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!