如何获取当前对象的输入参数及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
相关产品推荐
相关产品推荐

