Saya minta maaf atas rumusan pertanyaan yang agak kabur. Saya akan mencoba memperjelas maksud saya melalui contoh sederhana di bawah ini. Saya memiliki kelas yang ingin saya gunakan sebagai basis untuk kelas lain:
class parent:
def __init__(self, constant):
self.constant = constant
def addconstant(self, number):
return self.constant + number
Parameter self.constant
sangat penting untuk kegunaan kelas, karena metode addconstant
bergantung padanya. Oleh karena itu, metode __init__
berupaya memaksa pengguna untuk menentukan nilai parameter ini. Sejauh ini bagus.
Sekarang, saya mendefinisikan kelas anak seperti ini:
class child(parent):
def __init__(self):
pass
Tidak ada yang menghentikan saya untuk membuat instance kelas ini, tetapi ketika saya mencoba menggunakan addconstant
, jelas akan crash.
b = child()
b.addconstant(5)
AttributeError: 'child' object has no attribute 'constant'
Mengapa Python mengizinkan melakukan ini!? Saya merasa bahwa Python terlalu fleksibel dan entah bagaimana melanggar inti OOP dan enkapsulasi. Jika saya ingin memperluas suatu kelas untuk memanfaatkan warisan, saya harus berhati-hati dan mengetahui detail tertentu dari implementasi kelas tersebut. Dalam hal ini, saya harus tahu bahwa memaksa pengguna untuk menyetel konstanta parameter constant
adalah hal mendasar agar tidak merusak kegunaan kelas. Bukankah ini melanggar prinsip enkapsulasi?
constant
; meneleponparent.__init__
tidak. - person chepner   schedule 19.02.2021