【发布时间】:2016-10-18 23:33:50
【问题描述】:
我最近遇到了this question。
import Object class Visitor(Object): def __init__(self): super(Visitor,self).__init__() def visit(self, obj): pass def getIsDone(self): return False isDone = property(fget =lambda self:self.getIsDone())我得到这个错误:
TypeError: module.__init__() takes at most 2 arguments (3 given)
及其答案:
class A:pass print(A) #outputs <class '__main__.A'> import urllib print(urllib) #outputs <module 'urllib' from '/usr/lib/python3.2/urllib/__init__.py'>您的错误正在发生,因为 Object 是一个模块,而不是一个类。所以 你的继承权很糟糕。
将您的导入语句更改为:
from Object import ClassName和你的类定义:
class Visitor(ClassName):或
将您的类定义更改为:
class Visitor(Object.ClassName): etc
我对这个答案并不满意,因为我不确定如何从该错误消息中得出结论,即我不小心继承自模块而不是类。我想知道是否有人可以详细说明为什么会发生此错误以及给出的论点到底是什么?当 python 解释器遇到这样的代码时:
class Employee(Person) 发生了什么?回答者所说的我的继承权到底是什么意思?感谢您对资源的任何解释或参考。
【问题讨论】:
-
python 语言是如此动态,你可以传递任何存在的实体。只有在执行时才会报告问题。如果您将整数变量作为父级传递,它也会尝试为 int 调用 init()。
-
有关概述,请参阅The Python Tutorial、9.5. Inheritance。
import语句的使用包含在 6. Modules 中。
标签: python class inheritance module python-internals