Dav*_*ill 43 python inheritance metaclass class
我今天早些时候试图将threading.Condition子类化,但它没有成功.当我尝试子类化threading.Condition类时,这是Python解释器的输出:
>>> 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
Run Code Online (Sandbox Code Playgroud)
有人可以解释这个错误吗?谢谢!
Wil*_*hen 77
您正在获得该异常,因为尽管它类似于类,但它threading.Condition是一个函数,并且您不能将函数子类化.
>>> type(threading.Condition)
<type 'function'>
Run Code Online (Sandbox Code Playgroud)
Python bugtracker上引发了这个不太有用的错误消息,但它已标记为"无法修复".
Ste*_*man 21
关于子类化模块,如果你有一个Foo.py文件中定义的类Foo,这是一个非常容易犯的错误.当您在另一个文件中创建Foo的子类时,您可能会意外地执行以下操作(这是尝试子类化模块并将导致错误):
import Foo
class SubclassOfFoo(Foo):
Run Code Online (Sandbox Code Playgroud)
当你真的需要做的时候:
from Foo import Foo
class SubclassOfFoo(Foo):
Run Code Online (Sandbox Code Playgroud)
要么:
import Foo
class SubclassofFoo(Foo.Foo):
Run Code Online (Sandbox Code Playgroud)
请注意:这个答案真的应该是对提到子类化模块的答案的评论,但由于本文中描述的StackOverflow行为,我无法将其作为评论:https: //meta.stackexchange.com/questions/23211/how-do-i-add-a-comment-to-an-answer 不要因此而投票.