调用元类基地时出现错误:()函数的参数1必须是代码,而不是str的
-
19-09-2019 - |
题
我想今天早些时候子类threading.Condition但没有成功。下面是Python解释的输出,当我尝试子类threading.Condition类:
>>> import threading
>>> class ThisWontWork(threading.Condition):
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
function() argument 1 must be code, not str
有人能解释这个错误?谢谢!
解决方案
你得到的异常,因为,尽管其类,如姓名,threading.Condition
是一个函数,你不能子类的功能。
>>> type(threading.Condition)
<type 'function'>
这不是非常有用的错误消息已经上调Python的错误追踪,但它一直标记为 “不会解决。”
其他提示
不同的问题比OP了,但如果你试图从一个模块而不是类的子类也可以得到这个错误(例如,您尝试继承My.Module而不是My.Module.Class)。荣誉对这个帖子帮助我弄清楚了这一点。
类型错误:错误调用元类的碱时
有关这一项的答案是,你可能名为Python类的 同样的事情模块(即文件),它的。你再 进口模块,并试图使用它像一个类。你这样做 因为你和我一样,很可能是一个Java程序员没有那么长 前:-)。解决它的方法是导入module.class代替 只是模块。或者,对于理智的缘故,改变类的名称 或模块,使得它更明显什么正在导入。
对于子类的模块,这是一个非常容易犯的错误,如果你有, 例如,类Foo在一个文件中定义Foo.py. 当您在不同的文件中创建的Foo的子类,你可能会不小心做以下(这是细分模块,将导致错误的尝试):
import Foo
class SubclassOfFoo(Foo):
当你真的需要做以下活动:
from Foo import Foo
class SubclassOfFoo(Foo):
或:
import Foo
class SubclassofFoo(Foo.Foo):
请注意:这个答案真的应该是上提到继承模块答案评论,但我不能让它因为在这篇文章中描述的行为StackOverflow的评论: https://meta.stackexchange.com/questions/ 23211 /怎么办-I-附加一个注释到一个应答 不要选它,只是因为这一点。
涌入了同样的问题。最后采取的代码产生了浓厚的外观得到解决,这是哪里的警报关于字符串而不是代码TypeError
自带约..
Class Class_name(models.model): //(gives a TypeError of 'str' type)
“和”
Class Class_name(models.Model): // is the correct one.
注意,特定错误出现约因为单个小写字母的代码的“的模型强>”,这又使得一个字符串