LoạiError: mô-đun .__ init __ () mất tối đa 2 đối số (3 đã cho)


147

Tôi đã định nghĩa một lớp trong một tập tin có tên Object.py. Khi tôi cố gắng kế thừa từ lớp này trong một tệp khác, việc gọi hàm tạo sẽ ném ra một ngoại lệ:

TypeError: module.__init__() takes at most 2 arguments (3 given)

Đây là mã của tôi:

import Object

class Visitor(Object):
    pass

instance = Visitor()  # this line throws the exception

Tôi đang làm gì sai?


1
Bạn có thể vui lòng chọn câu trả lời được cung cấp? Nó có vẻ đúng và sẽ cho phép các câu hỏi khác được đóng lại dưới dạng bản sao của bạn.
Nhà vật lý điên

1
Hey @wakamdr chức năng câu hỏi trùng lặp là khá hữu ích. Có một lý do tại sao câu trả lời của tôi là không chính xác?
Sheena

Một câu trả lời không cần phải được chấp nhận cho các câu hỏi khác được đóng lại thành hai bản sao của câu hỏi này.
user2357112 hỗ trợ Monica

Câu trả lời:


237

Lỗi của bạn đang xảy ra vì Objectlà một mô-đun, không phải là một lớp. Vì vậy, thừa kế của bạn là vít.

Thay đổi câu lệnh nhập của bạn thành:

from Object import ClassName

và định nghĩa lớp của bạn để:

class Visitor(ClassName):

hoặc là

thay đổi định nghĩa lớp của bạn thành:

class Visitor(Object.ClassName):
   etc

Wiil nó hoạt động như nhau, nếu bỏ qua ClassNamehoàn toàn? Giống như class Visitor()?
VMAtm

1
@VMAtm: Tại sao bạn không thử và tìm hiểu. Python tuyệt vời vì nó có trình thông dịch. Tuyệt vời để thử nghiệm nhanh
Sheena

2
Thiên tài. dòng lỗi tồi tệ nhất trên thế giới. tôi mất 3 giờ để nhận ra tôi đang sử dụng mô-đun chứ không phải lớp học. # $% ^ $% & $% &
Mickey Perlstein

Để làm rõ hơn cho người dùng Java, tệp này là Object và lớp là ClassName. Trong Python một tệp là một mô-đun và (các) định nghĩa lớp bên trong tệp là các lớp.
Kelly Bang

6

Ngay cả sau câu trả lời của @Mickey Perlstein và 3 giờ làm việc thám tử của anh ấy, tôi vẫn mất thêm vài phút để áp dụng điều này vào mớ hỗn độn của chính mình. Trong trường hợp có ai khác giống tôi và cần thêm một chút trợ giúp, đây là những gì đang diễn ra trong tình huống của tôi.

  • phản hồi là một mô-đun
  • Phản hồi là một lớp cơ sở trong mô đun trả lời
  • GeoJsonResponse là một lớp mới có nguồn gốc từ Phản hồi

Lớp GeoJsonResponse ban đầu:

from pyexample.responses import Response

class GeoJsonResponse(Response):

    def __init__(self, geo_json_data):

Nhìn ổn. Không có vấn đề gì cho đến khi bạn cố gắng gỡ lỗi, đó là khi bạn nhận được một loạt các thông báo lỗi có vẻ mơ hồ như thế này:

từ pyexample.responses nhập GeoJsonResponse .. \ pyexample \ reply \ GeoJsonResponse.py: 12: trong (mô-đun) lớp GeoJsonResponse (Phản hồi):

E TypeError: module () mất tối đa 2 đối số (3 đã cho)

=================================== LRI ============== ======================

___________________ ERROR thu thập các bài kiểm tra / test_geojson.py ____________________

test_geojson.py:2: in (mô-đun) từ pyexample.responses nhập GeoJsonResponse .. \ pyexample \ reply \ GeoJsonResponse.py: 12: in (mô-đun)

lớp GeoJsonResponse (Phản hồi): E TypeError: module () mất tối đa 2 đối số (3 đã cho)

LRI: không tìm thấy: \ PyExample \ tests \ test_geojson.py :: TestGeoJson :: test_api_response

C: \ Python37 \ lib \ site-gói \ aenum__init __. Py: 163

(không có tên 'PyExample \ tests \ test_geojson.py :: TestGeoJson :: test_api_response' trong bất kỳ [])

Các lỗi đã cố hết sức để chỉ cho tôi đi đúng hướng và câu trả lời của @Mickey Perlstein đã chết, tôi chỉ mất một phút để tập hợp tất cả lại trong bối cảnh của riêng mình:

Tôi đã nhập mô-đun :

from pyexample.responses import Response

khi tôi nên nhập lớp :

from pyexample.responses.Response import Response

Hy vọng điều này sẽ giúp được ai đó. (Trong phòng thủ của tôi, nó vẫn còn khá sớm.)


Làm thế nào điều này có liên quan đến câu hỏi?
Leevi L

3

Bạn cũng có thể làm như sau trong Python 3.6.1

from Object import Object as Parent

và định nghĩa lớp của bạn để:

class Visitor(Parent):

2
from Object import Object

hoặc là

From Class_Name import Class_name

Nếu Object là một .pytập tin.


0

Trong trường hợp của tôi khi tôi gặp vấn đề, tôi đã đề cập đến một mô-đun khi tôi cố gắng mở rộng lớp.

import logging
class UserdefinedLogging(logging):

Nếu bạn xem Thông tin Tài liệu, bạn sẽ thấy "ghi nhật ký" được hiển thị dưới dạng mô-đun.

Trong trường hợp cụ thể này, tôi chỉ cần kế thừa mô-đun ghi nhật ký để tạo thêm một lớp cho việc ghi nhật ký.


Điều này có thể đủ điều kiện như là một bình luận, không trả lời. Xin vui lòng chỉ trả lời nếu bạn nghĩ rằng nó sẽ giải quyết vấn đề.
Hamza Khurshid

Xin lỗi vì điều đó. Tôi mới sử dụng tích cực stackoverflow và tôi không quen thuộc với netiquette của trang web.
Gerardsson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.