You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取当前对象的输入参数及Factory Boy传递给MyClass的原始值?

获取Factory Boy对象的输入参数与原始值

一、获取当前对象的输入参数

你的MyClass类在__init__中仅处理了raw参数并保存了processed属性,未保留原始输入参数。要获取输入参数,最直接的方式是在MyClass中把传入的raw保存为实例属性:

class MyClass:
    def __init__(self, raw):
        self.raw = raw  # 新增:保存原始输入参数
        self.processed = f'***{raw}***'

class MyClassFactory(factory.Factory):
    class Meta:
        model = MyClass
    raw = factory.fuzzy.FuzzyChoice(['a', 'b'])

o = MyClassFactory.create()
print(o.raw)  # 输出Factory生成的原始raw值,如'a'或'b'

二、获取Factory Boy传递给MyClass的原始值

如果不想修改MyClass的代码,有两种常用方式:

方式1:先获取参数字典再创建对象

通过Factory Boy的build(dict=True)方法先拿到生成的参数集合,再用这些参数创建对象,即可获取原始值:

# 获取Factory生成的原始参数
raw_params = MyClassFactory.build(dict=True)
original_raw_value = raw_params['raw']

# 用参数创建对象
o = MyClassFactory.create(**raw_params)
print(original_raw_value)  # 输出传递给MyClass的原始raw值

方式2:扩展Factory的_create方法

在Factory类中重写_create方法,在对象创建前捕获传递给MyClass的原始参数:

class MyClassFactory(factory.Factory):
    class Meta:
        model = MyClass
    raw = factory.fuzzy.FuzzyChoice(['a', 'b'])

    @classmethod
    def _create(cls, model_class, *args, **kwargs):
        # 在此处获取传递给MyClass的原始参数
        original_raw = kwargs['raw']
        print(f"Factory传递的原始raw值:{original_raw}")
        return super()._create(model_class, *args, **kwargs)

o = MyClassFactory.create()

内容的提问来源于stack exchange,提问作者GlaceCelery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:41:30