Kelas dengan Objek sebagai parameter

114

Saya mencoba menerjemahkan beberapa kode python ke kode skala. Jadi saya benar-benar noob di Python.

Tetapi mengapa beberapa kelas memiliki objek sebagai parameter tetapi tidak pernah secara eksplisit menggunakannya? Apa alasan untuk menjadikannya sebagai parameter?

Contoh:

class Table(object)

Terima kasih atas waktu Anda.

pemrogram mitos
sumber
1
kemungkinan duplikat dari gaya lama dan kelas gaya baru dengan Python
JBernardo

Jawaban:

112

Dalam Python2 ini mendeklarasikan Tablemenjadi kelas gaya baru (sebagai lawan dari kelas "klasik"). Di Python3 semua kelas adalah kelas gaya baru, jadi ini tidak lagi diperlukan.

Kelas gaya baru memiliki beberapa atribut khusus yang tidak dimiliki kelas klasik.

class Classic: pass
class NewStyle(object): pass

print(dir(Classic))
# ['__doc__', '__module__']

print(dir(NewStyle))
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

Juga, properti dan super tidak berfungsi dengan kelas klasik.

Dalam Python2, sebaiknya membuat semua kelas kelas gaya baru. (Meskipun banyak kelas di pustaka standar masih merupakan kelas klasik, demi kompatibilitas dengan versi sebelumnya.)

Secara umum, dalam pernyataan seperti

class Foo(Base1, Base2):

Foodideklarasikan sebagai kelas yang mewarisi dari kelas dasar Base1dan Base2.

objectadalah ibu dari semua kelas dengan Python. Ini adalah kelas gaya baru, jadi mewarisi dari objectmembuat Tablekelas gaya baru.

unutbu
sumber
dapatkah Anda mengarahkan saya ke sumber yang menyebutkan objek tidak diperlukan sebagai parameter di Python3? Sepertinya saya tidak dapat menemukannya. Terima kasih
Salju
1
Ini telah disebutkan berkali-kali di StackOverflow (di sini, misalnya ), tetapi saya belum dapat menemukan deklarasi sederhana tentang ini di dokumen. Ini ditunjukkan secara implisit (dengan menghilangkan dari objectdaftar basis kelas) dalam tutorial .
unutbu
1
The Python3 docs juga menyatakan bahwa sebuah "gaya baru kelas" adalah "nama lama untuk rasa kelas sekarang digunakan untuk semua objek kelas " (penekanan saya). Dan dokumen Python2 menyatakan bahwa "kelas gaya baru" adalah kelas mana pun yang mewarisi object. Kedua pernyataan yang disatukan menyiratkan bahwa Anda tidak perlu memasukkan objectdalam daftar basis kelas di Python3 karena semua kelas adalah kelas gaya baru di Python3.
unutbu
21

The Tablekelas memperluas kelas yang disebut object. Ini bukan argumen. Alasan Anda mungkin ingin memperluas objectsecara eksplisit adalah karena mengubah kelas menjadi kelas gaya baru. Jika Anda tidak secara eksplisit menetapkannya meluas object, hingga Python 3, itu akan secara default menjadi kelas gaya lama. (Sejak Python 3, semua kelas adalah gaya baru, apakah Anda secara eksplisit memperluas objectatau tidak.)

Untuk informasi lebih lanjut tentang gaya baru dan kelas gaya lama, silakan lihat pertanyaan ini .

icktoofay
sumber
1
Ini adalah jawaban yang lebih lugas dan ringkas. Terima kasih.
Sabuncu
3

Perlu diketahui bahwa perbedaan kelas "gaya baru" vs "gaya lama" khusus untuk Python 2.x; di 3.x, semua kelas adalah "gaya baru".

Lawrence D'Oliveiro
sumber
2

class Tabel dan class Tabel (objek) tidak berbeda dengan Python.

Ini bukan sebuah parameter, yang diperluas dari objek (yang merupakan Kelas dasar seperti banyak bahasa lainnya).

Semua yang dikatakan adalah bahwa ia mewarisi apa pun yang didefinisikan dalam "objek". Ini adalah perilaku default.

Devraj
sumber
3
Kelas yang secara otomatis diperluas objectadalah perilaku default hanya di Python 3. Dalam python 2, objek perluasan kelas memiliki atribut yang tidak akan dimiliki oleh kelas yang tidak memperluas objek.
Lewis Ellis
1

objek adalah jenis objek kelas paling dasar yang didefinisikan dalam python. Atribut objek dapat dilihat seperti di bawah ini

** >>> dir (objek)

[' class ', ' delattr ', ' doc ', ' format ', ' getattribute ', ' hash ', ' init ', ' new ', ' reduce ', ' reduce_ex ', ' repr ', ' setattr ', ' sizeof ',' str ',' subclasshook '] **

Jadi Tabel (objek) hanyalah warisan.!

Anilkumar Mallakkanavar
sumber
0

1) Nama kelas (objek): 2) nama kelas: Keduanya sama tetapi yang pertama cukup baik dalam hal penulisan, terlihat lebih baik saat mewarisi kelas lain ke kelas lain, terlihat homogen.

Seberapa sama? Jadi, setiap hal di Python berada di bawah objek berarti setiap hal di Python memiliki properti objek, jika ditulis atau tidak, ia akan memahaminya. Pertama kami secara eksplisit mengatakannya di detik kami tidak melakukannya.


sumber
Ini tidak terjadi di Python 2, lihat jawaban yang diterima untuk detailnya.
niemmi