Python factory boy无法使用元类从基工厂继承:`issubclass`错误

Python factory boy无法使用元类从基工厂继承:`issubclass`错误,python,python-2.7,metaclass,factory-boy,Python,Python 2.7,Metaclass,Factory Boy,我对工厂男孩还不太熟悉。我有一个模型,它在对象层次结构中的不同位置创建,并具有不同的属性,这取决于它的使用方式。在这种情况下,我有一个图片,要么是一个标志或个人资料图片 这很好: class ProfileImageBase(factory.Factory): mimetype = 'png' image = 'some bytes' class UserProfileImage(ProfileImageBase): class Meta: mod

我对工厂男孩还不太熟悉。我有一个模型,它在对象层次结构中的不同位置创建,并具有不同的属性,这取决于它的使用方式。在这种情况下,我有一个图片,要么是一个标志或个人资料图片

这很好:

class ProfileImageBase(factory.Factory):
    mimetype = 'png'
    image    = 'some bytes'

class UserProfileImage(ProfileImageBase):
    class Meta:
        model = models.media_models.ProfileImage
    parent = factory.SubFactory(BasicUser)
    id     = ProfileImage.PROFILE

class MerchantLogoImage(ProfileImageBase):
    class Meta:
        model = models.media_models.ProfileImage
    parent = factory.SubFactory(BasicMerchant)
    id     = ProfileImage.LOGO
不是很干吧?我想将元类放在基类中,但这会给我带来疯狂的错误:

class ProfileImageBase(factory.Factory):
    class Meta:
        model = models.media_models.ProfileImage
    mimetype = 'png'
    image    = 'some bytes'

class UserProfileImage(ProfileImageBase):
    parent = factory.SubFactory(BasicUser)
    id     = ProfileImage.PROFILE

class MerchantLogoImage(ProfileImageBase):
    parent = factory.SubFactory(BasicMerchant)
    id     = ProfileImage.LOGO
这是回溯

Traceback (most recent call last):
  File "/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site-packages/nose/loader.py", line 418, in loadTestsFromName
    addr.filename, addr.module)
  File "/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site-packages/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site-packages/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/home/sheena/Workspace/Waxed/code/waxed_backend/src/waxed_backend/concerns/pictures/tests/view_tests.py", line 3, in <module>
    from ....models.test_factories.profile_pictures import MerchantLogoImage
  File "/home/sheena/Workspace/Waxed/code/waxed_backend/src/waxed_backend/models/test_factories/profile_pictures.py", line 13, in <module>
    class UserProfileImage(ProfileImageBase):
  File "/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site-packages/factory/base.py", line 114, in __new__
    params=attrs_params,
  File "/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site-packages/factory/base.py", line 232, in contribute_to_class
    self.counter_reference = self._get_counter_reference()
  File "/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site-packages/factory/base.py", line 259, in _get_counter_reference
    and issubclass(self.model, self.base_factory._meta.model)):
TypeError: Error when calling the metaclass bases
    issubclass() arg 1 must be a class
回溯(最近一次呼叫最后一次):
loadTestsFromName中的文件“/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site packages/nose/loader.py”,第418行
addr.filename,addr.module)
文件“/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site packages/nose/importer.py”,第47行,在importFromPath中
返回self.importFromDir(目录路径,fqname)
importFromDir中的文件“/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site packages/nose/importer.py”,第94行
mod=加载模块(部件名称、fh、文件名、描述)
文件“/home/sheena/Workspace/Waxed/code/Waxed_backend/src/Waxed_backend/concerns/pictures/tests/view_tests.py”,第3行,在
从…models.test_factories.profile_pictures导入MerchantLogoImage
文件“/home/sheena/Workspace/Waxed/code/Waxed_backend/src/Waxed_backend/models/test_factories/profile_pictures.py”,第13行,在
类UserProfileImage(ProfileImageBase):
文件“/home/sheena/Workspace/Waxed/venvs/wxt_comp/local/lib/python2.7/site packages/factory/base.py”,第114行,新__
参数=属性参数,
文件“/home/sheena/Workspace/Waxed/venvs/wxt\u comp/local/lib/python2.7/site packages/factory/base.py”,第232行,贡献给类
self.counter\u reference=self.\u get\u counter\u reference()
文件“/home/sheena/Workspace/Waxed/venvs/wxt\u comp/local/lib/python2.7/site packages/factory/base.py”,第259行,在“获取计数器”参考中
和issubclass(self.model、self.base\u factory.\u meta.model)):
TypeError:调用元类基时出错
issubclass()arg 1必须是类

我的问题是:这里到底发生了什么?我不相信我在做任何新奇的事情。

我不使用factory boy——但那是Python 2——你能试着从“object”继承这个嵌套的“Meta”类,看看会发生什么吗?(在Python 2中,没有从object继承的类变成了遗留基类,因为不符合新样式的类,它会破坏很多东西)我已经安装了factory_boy,无法复制您的问题。-从一个类继承而不重新声明
很有效。@jsbueno:我试过了。。。很奇怪。我会再多玩一会儿。这似乎只是factory_boy的一个问题,如果我不从factory继承,那么这不是一个问题我不使用factory boy-但这是Python 2-你能尝试从“object”继承这个嵌套的“Meta”类,看看会发生什么吗?(在Python 2中,没有从object继承的类变成了遗留基类,因为不符合新样式的类,它会破坏很多东西)我已经安装了factory_boy,无法复制您的问题。-从一个类继承而不重新声明
很有效。@jsbueno:我试过了。。。很奇怪。我会再多玩一会儿。这似乎只是工厂男孩的问题,如果我没有从工厂继承,那就不是问题