Я определил класс в файле с именем Object.py
. Когда я пытаюсь наследовать этот класс в другом файле, вызов конструктора вызывает исключение:
TypeError: module.__init__() takes at most 2 arguments (3 given)
Это мой код:
import Object
class Visitor(Object):
pass
instance = Visitor() # this line throws the exception
Что я делаю не так?
Ответ 1
Ваша ошибка происходит, потому что Object
является модулем, а не классом. Таким образом, ваше наследство застенчиво.
Измените оператор импорта:
from Object import ClassName
и определение вашего класса:
class Visitor(ClassName):
или
измените определение своего класса на:
class Visitor(Object.ClassName):
etc
Ответ 2
Вы также можете сделать следующее в Python 3.6.1
from Object import Object as Parent
и определение вашего класса:
class Visitor(Parent):
Ответ 3
Даже после ответа @Mickey Perlstein и его 3 часов детективной работы мне все еще потребовалось еще несколько минут, чтобы применить это в моем собственном беспорядке. В случае, если кто-то похож на меня и нуждается в дополнительной помощи, вот что происходило в моей ситуации.
- Отзывы это модуль
- Ответ является базовым классом в модуле ответов.
- GeoJsonResponse - это новый класс, производный от Response
Начальный класс GeoJsonResponse:
from pyexample.responses import Response
class GeoJsonResponse(Response):
def __init__(self, geo_json_data):
Выглядит хорошо. Никаких проблем, пока вы не попытаетесь отладить эту вещь, когда вы получаете кучу, казалось бы, расплывчатых сообщений об ошибках вроде этого:
из pyexample.responses импортировать GeoJsonResponse..\pyexample\response\GeoJsonResponse.py: 12: в (модуль) класс GeoJsonResponse (Response):
E TypeError: module() принимает не более 2 аргументов (дано 3)
=================================== ОШИБКИ ============== ======================
___________________ ОШИБКА, собирающая тесты /test_geojson.py ____________________
test_geojson.py:2: in (модуль) из pyexample.responses импортировать GeoJsonResponse..\pyexample\response\GeoJsonResponse.py: 12: in (модуль)
Класс GeoJsonResponse (Response): E TypeError: module() принимает не более 2 аргументов (3 дано)
ОШИБКА: не найдено:\PyExample\tests\test_geojson.py :: TestGeoJson :: test_api_response
C:.\Python37\Lib\сайт-пакеты\aenum__init __ пе: 163
(без имени 'PyExample\tests\test_geojson.py :: TestGeoJson :: test_api_response' в любом из [])
Ошибки делали все возможное, чтобы указать мне правильное направление, и ответ @Mickey Perlstein был мертв, мне потребовалась всего одна минута, чтобы собрать все это вместе в моем собственном контексте:
Я импортировал модуль:
from pyexample.responses import Response
когда я должен был импортировать класс:
from pyexample.responses.Response import Response
Надеюсь, это кому-нибудь поможет. (В мою защиту, это все еще довольно рано.)
Ответ 4
from Object import Object
или
From Class_Name import Class_name
Если объект представляет собой файл .py
.