TypeError: module .__ init __ () mengambil paling banyak 2 argumen (3 diberikan)


147

Saya telah mendefinisikan kelas dalam file bernama Object.py. Ketika saya mencoba mewarisi dari kelas ini di file lain, memanggil konstruktor melempar pengecualian:

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

Ini kode saya:

import Object

class Visitor(Object):
    pass

instance = Visitor()  # this line throws the exception

Apa yang saya lakukan salah?


1
Bisakah Anda memilih jawaban yang disediakan? Tampaknya benar dan akan memungkinkan pertanyaan lain ditutup sebagai duplikat dari Anda.
Fisikawan Gila

1
Hai @wakamdr, fungsi pertanyaan rangkap cukup berguna. Apakah ada alasan mengapa jawaban saya salah?
Sheena

Jawaban tidak perlu diterima untuk pertanyaan lain yang akan ditutup-dup sebagai duplikat dari jawaban ini.
user2357112 mendukung Monica

Jawaban:


237

Kesalahan Anda terjadi karena Object modul, bukan kelas. Jadi warisanmu edan.

Ubah pernyataan impor Anda ke:

from Object import ClassName

dan definisi kelas Anda untuk:

class Visitor(ClassName):

atau

ubah definisi kelas Anda menjadi:

class Visitor(Object.ClassName):
   etc

Akankah itu bekerja sama, jika satu menghilangkan ClassNamesepenuhnya? Suka class Visitor()?
VMAtm

1
@ VMAtm: Mengapa Anda tidak mencobanya dan mencari tahu. Cos besar Python memiliki penerjemah. Bagus untuk eksperimen cepat
Sheena

2
Jenius. garis kesalahan terburuk di dunia. Butuh waktu 3 jam untuk mencari tahu saya menggunakan modul dan bukan kelas. # $% ^ $% & $% &
Mickey Perlstein

Untuk membuatnya lebih jelas bagi pengguna Java, file adalah Object dan kelasnya adalah ClassName. Dalam Python file adalah modul dan definisi kelas di dalam file adalah kelas.
Kelly Bang

6

Bahkan setelah jawaban @Mickey Perlstein dan 3 jam kerja detektifnya, saya masih perlu beberapa menit untuk menerapkan ini pada kekacauan saya sendiri. Jika ada orang lain seperti saya dan perlu sedikit bantuan lagi, inilah yang terjadi dalam situasi saya.

  • tanggapan adalah modul
  • Respons adalah kelas dasar dalam modul respons
  • GeoJsonResponse adalah kelas baru yang berasal dari Response

Kelas GeoJsonResponse awal:

from pyexample.responses import Response

class GeoJsonResponse(Response):

    def __init__(self, geo_json_data):

Terlihat baik. Tidak ada masalah sampai Anda mencoba men-debug hal itu, yaitu ketika Anda mendapatkan banyak pesan kesalahan yang tampaknya tidak jelas seperti ini:

dari pyexample.responses import GeoJsonResponse .. \ pyexample \ response \ GeoJsonResponse.py: 12: dalam (modul) kelas GeoJsonResponse (Respon):

E TypeError: module () membutuhkan paling banyak 2 argumen (3 diberikan)

=================================== KESALAHAN ============== ======================

___________________ KESALAHAN mengumpulkan tes / test_geojson.py ____________________

test_geojson.py .:: dalam (modul) dari pyexample.responses mengimpor GeoJsonResponse .. \ pyexample \ response \ GeoJsonResponse.py: 12: dalam (modul)

class GeoJsonResponse (Response): E TypeError: module () mengambil paling banyak 2 argumen (3 diberikan)

GALAT: tidak ditemukan: \ PyExample \ tests \ test_geojson.py :: TestGeoJson :: test_api_response

C: \ Python37 \ lib \ situs-paket \ aenum__init __. Py: 163

(tanpa nama 'PyExample \ tests \ test_geojson.py :: TestGeoJson :: test_api_response' di salah satu [])

Kesalahannya adalah melakukan yang terbaik untuk mengarahkan saya ke arah yang benar, dan jawaban @Mickey Perlstein sudah mati, hanya perlu satu menit untuk menyatukan semuanya dalam konteks saya sendiri:

Saya mengimpor modul :

from pyexample.responses import Response

ketika saya seharusnya mengimpor kelas :

from pyexample.responses.Response import Response

Semoga ini bisa membantu seseorang. (Dalam pembelaanku, ini masih sangat awal.)


bagaimana ini terkait dengan pertanyaan?
Leevi L

3

Anda juga dapat melakukan hal berikut dalam Python 3.6.1

from Object import Object as Parent

dan definisi kelas Anda untuk:

class Visitor(Parent):

2
from Object import Object

atau

From Class_Name import Class_name

Jika Objek adalah .pyfile.


0

Dalam kasus saya di mana saya memiliki masalah, saya merujuk ke sebuah modul ketika saya mencoba memperluas kelas.

import logging
class UserdefinedLogging(logging):

Jika Anda melihat Info Dokumentasi, Anda akan melihat "logging" ditampilkan sebagai modul.

Dalam kasus khusus ini saya harus mewarisi modul logging untuk membuat kelas tambahan untuk logging.


Ini dapat dikualifikasikan sebagai komentar, bukan jawaban. Harap jawab saja jika Anda pikir itu akan menyelesaikan masalah.
Hamza Khurshid

Maaf soal itu. Saya baru aktif menggunakan stackoverflow dan saya tidak begitu familiar dengan netiket situs.
Gerardsson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.