在语言服务器支持的自动完成无处不在之前,代码的编写方式是否使自动完成变得容易并不重要。像 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中文网其他相关文章!