Я недавно натолкнулся this question.Что происходит, когда вы принадлежите модулю вместо класса в Python?
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())
I get this error:
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'>
Your error is happening because Object is a module, not a class. So your inheritance is screwy.
Change your import statement to:
from Object import ClassName
and your class definition to:
class Visitor(ClassName):
or
change your class definition to:
class Visitor(Object.ClassName): etc
Я не очень доволен этим ответом, как я на самом деле не знаю, как я получаю от этого сообщения об ошибке к выводу, что я случайно унаследовать от модуль вместо класса. Мне было интересно, может ли кто-нибудь объяснить, почему эта ошибка происходит и какие именно аргументы даются? Когда интерпретатор python сталкивается с таким кодом: class Employee(Person)
что происходит? Что именно означает, что ответчик имеет в виду мое наследство, является отвратительным? Спасибо за любые объяснения или ссылки на ресурсы.
Язык python настолько динамичен, что вы можете передавать любую сущность, которая существует. Только при выполнении этих проблем сообщается о проблемах. Если бы вы передали целочисленную переменную как родительскую, она бы попыталась вызвать init() для int тоже. –
См. [_The Python Tutorial_] (https://docs.python.org/3/tutorial/), [9.5. Наследование] (https://docs.python.org/3/tutorial/classes.html#inheritance). Использование оператора 'import' описано в [6. Модули] (https://docs.python.org/3/tutorial/modules.html). –