gpt4 book ai didi

python - 类型错误 : metaclass conflict in python

转载 作者:行者123 更新时间:2023-11-28 19:26:09 26 4
gpt4 key购买 nike

我正在使用 django-tastypie 为我的 webapp 创建一个 rest API。我想创建如下所述的类,而不用显式地全部输入它们(我有超过 100 个类)

class CityResource(ModelResource):
class Meta:
queryset = City.objects.all()
class StateResource(ModelResource):
class Meta:
queryset = State.objects.all()
etc...

我正在考虑在 python 中使用元类(我的方法可能是错误的,但仍然想以这种方式解决它,因为我想看看元类如何帮助我,也许是在现实生活中学习它的好方法)

我试过这个:

class ClassFactory(type):
def __new__(cls, name, bases, dct):
return type.__new__(cls, name, bases, dct)

for model in get_models(app):
name = "%sResource" % model._meta.object_name
ClassFactory(name, (ModelResource, ), {'Meta':type('Meta', (), {'queryset': model.objects.all()})})

但这给出了一个错误:

TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

我在谷歌上搜索了一下,到处都提到如果一个类派生自具有两个不同元类的另外 2 个类,那么我创建的类必须有一个派生自两个元类的元类[*]。

  1. 在我的情况下,这个错误是如何发生的,因为我是从同一个类 ModelResource 派生的?
  2. 我不确定我是否理解 [*]

我可能以错误的方式解决了这个问题,但需要一些指导。

最佳答案

(转自评论。)

我认为您根本不需要 ClassFactory“元类”。

klass = type(name, (ModelResource, ), {...})

应该根据需要为您提供一个派生自 ModelResource 的新类。

关于python - 类型错误 : metaclass conflict in python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com