Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用factory_boy从父工厂继承参数_Python_Factory Boy - Fatal编程技术网

Python 使用factory_boy从父工厂继承参数

Python 使用factory_boy从父工厂继承参数,python,factory-boy,Python,Factory Boy,我想要一个子工厂来扩展它的父工厂。我认为扩展参数比复制参数更可取。我尝试过让子类中的Params从父类Params继承,如下所示: import factory class BaseFactory(factory.Factory): class Params: configuration_one = True class MyFactory(BaseFactory): class Params(BaseFactory.Params): con

我想要一个子工厂来扩展它的父工厂。我认为扩展参数比复制参数更可取。我尝试过让子类中的
Params
从父类
Params
继承,如下所示:

import factory


class BaseFactory(factory.Factory):
    class Params:
        configuration_one = True

class MyFactory(BaseFactory):
    class Params(BaseFactory.Params):
        configuration_two = False
这是失败的,但有一个例外:

AttributeError                            Traceback (most recent call last)
<ipython-input-5-cc609d2c781d> in <module>()
      6         configuration_one = True
      7
----> 8 class MyFactory(BaseFactory):
      9     class Params(BaseFactory.Params):
     10         configuration_two = False

<ipython-input-5-cc609d2c781d> in MyFactory()
      7
      8 class MyFactory(BaseFactory):
----> 9     class Params(BaseFactory.Params):
     10         configuration_two = False
     11

AttributeError: type object 'BaseFactory' has no attribute 'Params'
AttributeError回溯(最近一次调用)
在()
6配置1=正确
7.
---->8级MyFactory(基本工厂):
9类参数(BaseFactory.Params):
10配置2=错误
在我的工厂()
7.
8级MyFactory(基本工厂):
---->9类参数(BaseFactory.Params):
10配置2=错误
11
AttributeError:类型对象“BaseFactory”没有属性“Params”
是什么导致了这个错误,有没有一种惯用的方法来实现我的目标

版本

Python
-2.7.12


工厂男孩
-2.9.2

我正在朝着同样的目标努力。我想干掉我的工厂,因为我使用的是多态模型

坏消息是factoryboy DSL从属性中删除了Meta和Params类。我不知道他们为什么这样做,可能这简化了他们从父工厂继承前置变量和后置变量的方式?我认为他们试图模仿ruby中的FactoryGirl,但没有能力进行monkey补丁,因为python

这是相关文件

祝你好运

另外,通过将父Param类放在父工厂之外,我取得了一些进展,但它仍然不起作用

import factory 

class BaseParam:
  foo=True,
  bar=False 

class MyFactory(factory.Factory):
  class Meta:
    abstract=False
    model=Yolo

  class Params(BaseParam):
    baz=factory.Trait(
      foo=False
    )

MyFactory(baz=True)
给我这个

TypeError: 'foo' is an invalid keyword argument for this function

因此,Param显然没有继承任何东西,也没有像普通类那样发挥作用。

我找到了一种使用decorator的方法

In [47]: import factory 
    ...: 
    ...:   
    ...: def with_base_params(target_factory):
    ...:   class NewClass(target_factory):
    ...:     class Params:
    ...:       baz=factory.Trait(
    ...:         name="chandeeland",
    ...:         address="123 fake st"
    ...:       )
    ...:   return NewClass
    ...: 
    ...: @with_base_params
    ...: class MyFactory(factory.Factory):
    ...:   class Meta:
    ...:     abstract=False
    ...:     model=Contact
    ...: 
    ...:   name = "someone else"
    ...: 
    ...: a = MyFactory()
    ...: a.name == "someone else"
    ...: a.address == None
    ...: 
    ...: b = MyFactory(name="another name")
    ...: b.name == "another name"
    ...: b.address == None
    ...: 
    ...: c = MyFactory(baz=True)
    ...: c.name == "chandeeland"
    ...: c.address == "123 fake st"
    ...: 
Out[47]: True

它并不完美,您无法扩展参数,但它可以