Dengan Python, pertimbangkan saya memiliki kode berikut:
>>> class SuperClass(object):
def __init__(self, x):
self.x = x
>>> class SubClass(SuperClass):
def __init__(self, y):
self.y = y
# how do I initialize the SuperClass __init__ here?
Bagaimana cara saya menginisialisasi SuperClass __init__
subclass? Saya mengikuti tutorial Python dan tidak mencakup itu. Ketika saya mencari di Google, saya menemukan lebih dari satu cara untuk melakukannya. Bagaimana cara standar menangani ini?
__init__
.Mulai python 3.5.2, Anda dapat menggunakan:
https://docs.python.org/3/library/functions.html#super
sumber
Gunakan
super
objek untuk memastikan Anda mendapatkan metode berikutnya (sebagai metode terikat) dalam urutan resolusi metode. Di Python 2, Anda harus meneruskan nama kelas danself
ke super untuk mencari__init__
metode terikat :Di Python 3, ada sedikit keajaiban yang membuat argumen menjadi
super
tidak perlu - dan sebagai manfaat tambahannya bekerja sedikit lebih cepat:Melakukan hardcode induk seperti ini di bawah ini mencegah Anda menggunakan multiple inheritance kooperatif:
Perhatikan bahwa
__init__
mungkin hanya mengembalikanNone
- ini dimaksudkan untuk mengubah objek di tempat.Sesuatu
__new__
Ada cara lain untuk menginisialisasi instance - dan ini satu-satunya cara untuk subclass dari tipe yang tidak dapat diubah dengan Python. Jadi diperlukan jika Anda ingin membuat subclass
str
atautuple
objek tetap lainnya.Anda mungkin mengira itu metode kelas karena mendapat argumen kelas implisit. Tapi sebenarnya itu metode statis . Jadi Anda perlu menelepon
__new__
dengancls
eksplisit.Kami biasanya mengembalikan instance from
__new__
, jadi jika Anda melakukannya, Anda juga perlu memanggil basis Anda__new__
viasuper
juga di kelas dasar Anda. Jadi jika Anda menggunakan kedua metode tersebut:Python 3 menghindari sedikit keanehan panggilan super yang disebabkan oleh
__new__
metode statis, tetapi Anda masih perlu meneruskancls
ke metode tidak terikat__new__
:sumber