TypeError: module .__ init __ () รับได้สูงสุด 2 ข้อ (กำหนด 3 ข้อ)


147

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
คุณกรุณาเลือกคำตอบที่ให้ไว้ได้ไหม? ดูเหมือนว่าจะถูกต้องและจะอนุญาตให้คำถามอื่น ๆ ถูกปิดเป็นแบบสองทางของคุณ
นักฟิสิกส์บ้า

1
เฮ้ @wakamdr ฟังก์ชันคำถามที่ซ้ำกันมีประโยชน์มาก มีเหตุผลหรือไม่ที่คำตอบของฉันไม่ถูกต้อง?
Sheena

คำตอบไม่จำเป็นต้องได้รับการยอมรับสำหรับคำถามอื่น ๆ ที่จะถูกปิดโดยมีการดักจับซ้ำซ้อนของคำถามนี้
user2357112 รองรับ Monica

คำตอบ:


237

ข้อผิดพลาดของคุณเกิดขึ้นเพราะObjectเป็นโมดูลไม่ใช่คลาส ดังนั้นการรับมรดกของคุณเป็นสิ่งที่ไม่ดี

เปลี่ยนคำสั่งการนำเข้าของคุณเป็น:

from Object import ClassName

และคำจำกัดความของชั้นเรียนของคุณถึง:

class Visitor(ClassName):

หรือ

เปลี่ยนนิยามคลาสของคุณเป็น:

class Visitor(Object.ClassName):
   etc

มันจะทำงานเหมือนเดิมClassNameหรือไม่ ชอบclass Visitor()ไหม
VMAtm

1
@VMAtm: ทำไมคุณไม่ลองและหา ไพ ธ อนผู้ยิ่งใหญ่ของมันมีล่าม ยอดเยี่ยมสำหรับการทดลองอย่างรวดเร็ว
Sheena

2
อัจฉริยภาพ บรรทัดข้อผิดพลาดที่เลวร้ายที่สุดในโลก ฉันใช้เวลา 3 ชั่วโมงเพื่อหาว่าฉันใช้โมดูลไม่ใช่คลาส # $% ^ $% & $% &
Mickey Perlstein

เพื่อให้ชัดเจนยิ่งขึ้นสำหรับผู้ใช้ Java ไฟล์คือ Object และคลาสคือ ClassName ใน Python ไฟล์เป็นโมดูลและคำจำกัดความของคลาสภายในไฟล์คือคลาส
Kelly Bang

6

แม้หลังจากคำตอบของ @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 (การตอบสนอง):

E TypeError: module () รับได้สูงสุด 2 อาร์กิวเมนต์ (ได้รับ 3 ข้อ)

=================================== ข้อผิดพลาด ============== ======================

___________________ ข้อผิดพลาดในการรวบรวมการทดสอบ / test_geojson.py ____________________

test_geojson.py:2: in (โมดูล) จาก pyexample.responses นำเข้า GeoJsonResponse .. \ pyexample \ response \ GeoJsonResponse.py: 12: in (โมดูล)

class GeoJsonResponse (การตอบกลับ): E TypeError: module () รับได้สูงสุด 2 ข้อโต้แย้ง (ให้ 3 ข้อ)

ข้อผิดพลาด: ไม่พบ: \ PyExample \ tests \ test_geojson.py :: TestGeoJson :: test_api_response

PY \ Python37 \ lib \ เว็บไซต์แพคเกจ \ aenum__init __: C. 163

(ไม่มีชื่อ 'PyExample \ tests \ test_geojson.py :: TestGeoJson :: test_api_response' ในใด ๆ ของ [])

ข้อผิดพลาดกำลังทำให้ดีที่สุดเพื่อชี้ให้ฉันในทิศทางที่ถูกต้องและคำตอบของ @Mickey Perlstein นั้นตายไปแล้วฉันใช้เวลาสักครู่เพื่อรวมมันเข้าด้วยกันในบริบทของฉันเอง:

ฉันกำลังนำเข้าโมดูล :

from pyexample.responses import Response

เมื่อฉันควรนำเข้าชั้นเรียน :

from pyexample.responses.Response import Response

หวังว่านี่จะช่วยใครซักคน (ในการป้องกันของฉันมันยังค่อนข้างเร็ว)


สิ่งนี้เกี่ยวข้องกับคำถามอย่างไร
Leevi L



0

ในกรณีที่ฉันมีปัญหาฉันอ้างถึงโมดูลเมื่อฉันพยายามขยายชั้นเรียน

import logging
class UserdefinedLogging(logging):

หากคุณดูข้อมูลเอกสารคุณจะเห็น "การบันทึก" ปรากฏเป็นโมดูล

ในกรณีเฉพาะนี้ฉันต้องสืบทอดโมดูลการบันทึกเพื่อสร้างคลาสพิเศษสำหรับการบันทึก


สิ่งนี้สามารถถือว่าเป็นความคิดเห็นไม่ใช่คำตอบ กรุณาตอบถ้าคุณคิดว่ามันจะแก้ปัญหา
Hamza Khurshid

ขอโทษด้วยกับเรื่องนั้น. ฉันยังใหม่กับการใช้ stackoverflow อย่างแข็งขันและฉันไม่คุ้นเคยกับ netiquette ของไซต์
Gerardsson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.