ไวยากรณ์นิยามคลาส Python


95

มีความแตกต่างระหว่าง

class A:
    ...

และ

class A():
    ...

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

คำตอบ:


23

ข้อหลังนี้เป็นข้อผิดพลาดทางไวยากรณ์ใน Python เวอร์ชันเก่า ใน Python 2.x คุณควรได้รับจากobjectเมื่อใดก็ตามที่เป็นไปได้เนื่องจากคุณสมบัติที่มีประโยชน์หลายอย่างจะมีให้เฉพาะกับคลาสสไตล์ใหม่เท่านั้น(การรับมาจากobjectเป็นทางเลือกใน Python 3.x เนื่องจากคลาสสไตล์ใหม่เป็นค่าเริ่มต้น)


7
ไม่เป็นจริงใน python 3 อีกต่อไป สิ่งที่เกิดจากobjectเรื่องไร้สาระจะได้รับการดูแลโดยอัตโนมัติ
Temporary_user_name

4
ก็class A()เคยไวยากรณ์ผิดพลาดหรือไม่? หลาม 1.4 เอกสารบอกว่าของดีและผู้ที่มีเอกสารที่เก่าแก่ที่สุดที่ยังคงมีอยู่ใน python.org
user2357112 รองรับ Monica

90

แม้ว่าการใช้วงเล็บว่างในนิยามคลาสอาจไม่ถูกต้องทางไวยากรณ์ แต่วงเล็บหลังนิยามคลาสจะถูกใช้เพื่อระบุการสืบทอดเช่น:

class A(baseClass):
    ...

ใน Python ไวยากรณ์ที่ต้องการสำหรับการประกาศคลาสโดยไม่มีคลาสพื้นฐานคือ:

class A:
    ...

อย่าใช้วงเล็บเว้นแต่ว่าคุณจะอยู่ในคลาสอื่น ๆ

เอกสารเกี่ยวกับเรื่องนี้จะทำให้คุณมีความเข้าใจที่ดีขึ้นของวิธีการประกาศและการเรียนการใช้งานในหลาม

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