Sintaks definisi kelas Python

90

Apakah ada perbedaan antara

class A:
    ...

dan

class A():
    ...

Saya baru menyadari bahwa beberapa kelas saya didefinisikan sebagai kelas pertama dan mereka bekerja dengan baik. Apakah tanda kurung kosong ada bedanya?

Falmarri
sumber

Jawaban:

22

Yang terakhir adalah kesalahan sintaks pada versi lama Python. Dalam Python 2.x Anda harus mendapatkan dari objectkapan pun memungkinkan, karena beberapa fitur yang berguna hanya tersedia dengan kelas gaya baru (menurunkan dari objectadalah opsional di Python 3.x, karena kelas gaya baru adalah default di sana).

Ignacio Vazquez-Abrams
sumber
7
Tidak lagi benar di python 3; semua yang berasal dari objectomong kosong diurus secara otomatis.
temporary_user_name
4
Apakah class A()pernah terjadi kesalahan sintaks? Dokumen Python 1.4 mengatakan tidak apa-apa, dan itu adalah dokumen tertua yang masih tersedia di python.org.
user2357112 mendukung Monica
86

Meskipun mungkin tidak salah secara sintaksis untuk menggunakan tanda kurung kosong dalam definisi kelas, tanda kurung setelah definisi kelas digunakan untuk menunjukkan pewarisan, misalnya:

class A(baseClass):
    ...

Dalam Python, sintaks yang disukai untuk deklarasi kelas tanpa kelas dasar adalah:

class A:
    ...

Jangan gunakan tanda kurung kecuali Anda membuat subclass kelas lain.

The docs tentang masalah ini harus memberikan pemahaman yang lebih baik tentang bagaimana untuk menyatakan dan kelas digunakan dalam Python.

Rafe Kettler
sumber