在语言服务器支持的自动完成无处不在之前,代码是否以一种使自动完成变得容易的方式编写并不重要。像 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