导致此TypeError的原因是什么?

时间:2014-04-22 01:29:05

标签: python python-2.7 python-3.x

我有两个不同的文件,包含两个不同的类(我们称之为FooBar)。

在类Foo.py的文件(Foo)中,我有:

class Foo:
    def __init__(self):

    ...

在包含课程Bar.py的文件(Bar)中,我有:

from Foo import Foo

class Bar(Foo.Foo):
    def __init__(self):

    ...

当我运行我的代码时,我得到了这个TypeError

Traceback (most recent call last):
  File "Bar.py", line 2, in <module>
    class Bar(Foo.Foo):
TypeError: Error when calling the metaclass bases
    __init__() takes exactly 1 argument (4 given)

为什么它告诉我当代码中唯一的参数是__init__时,我有4个参数传递self

1 个答案:

答案 0 :(得分:2)

在我看来,您的问题是您直接导入该类,但之后尝试通过模块名称访问它。

如果您在模块源文件Foo中有一个类foo.py,那么您可以像这样使用它:

import foo
new_instance = foo.Foo()

你也可以这样做:

from foo import Foo
new_instance = Foo()

但你正试图这样做:

from Foo import Foo
new_instance = Foo.Foo()

在表达式Foo.Foo()中,第一个Foo是您的班级。然后在. Python解析出Foo并查找名为Foo的类成员。

注意:我建议您遵守PEP 8指南,并且您的模块应使用小写名称。因此foo.py而不是Foo.py

http://legacy.python.org/dev/peps/pep-0008/