Dalam versi python yang lebih lama ketika Anda membuat kelas dengan python, itu dapat mewarisi dari objek yang sejauh yang saya mengerti elemen python bawaan khusus yang memungkinkan objek Anda menjadi objek gaya baru.
Bagaimana dengan versi yang lebih baru (> 3.0 dan 2.6)? Saya mencari di Google tentang objek kelas tetapi saya mendapatkan begitu banyak hasil (untuk alasan yang jelas). Ada petunjuk?
Terima kasih!
python
python-3.x
thomas
sumber
sumber
Jawaban:
Anda tidak perlu mewarisi dari
object
untuk memiliki gaya baru di python 3. Semua kelas bergaya baru.sumber
object
terlepas apakah mengetik eksplisit(object)
atau tidak dengan Python 3.1Saya menyadari bahwa ini adalah pertanyaan lama, tetapi perlu dicatat bahwa bahkan di python 3 kedua hal ini tidak persis sama.
Jika Anda secara eksplisit mewarisi dari
object
, apa yang sebenarnya Anda lakukan adalah mewarisi daribuiltins.object
apa pun yang menunjuk pada saat itu.Oleh karena itu, saya dapat memiliki beberapa modul (sangat aneh) yang menimpa objek karena beberapa alasan. Kami akan menyebut modul pertama ini "newobj.py":
import builtins old_object = builtins.object # otherwise cyclic dependencies class new_object(old_object): def __init__(self, *args, **kwargs): super(new_object, self).__init__(*args, **kwargs) self.greeting = "Hello World!" builtins.object = new_object #overrides the default object
Kemudian di beberapa file lain ("klasses.py"):
class Greeter(object): pass class NonGreeter: pass
Kemudian di file ketiga (yang sebenarnya dapat kita jalankan):
import newobj, klasses # This order matters! greeter = klasses.Greeter() print(greeter.greeting) # prints the greeting in the new __init__ non_greeter = klasses.NonGreeter() print(non_greeter.greeting) # throws an attribute error
Jadi Anda dapat melihat bahwa, dalam kasus di mana ia secara eksplisit mewarisi dari objek, kami mendapatkan perilaku yang berbeda dari yang Anda izinkan dengan pewarisan implisit.
sumber