ฉันขอโทษสำหรับการกำหนดคำถามที่ค่อนข้างคลุมเครือ ฉันจะพยายามชี้แจงสิ่งที่ฉันหมายถึงโดยใช้ตัวอย่างง่ายๆ ด้านล่างนี้ ฉันมีคลาสที่ต้องการใช้เป็นฐานสำหรับคลาสอื่น:
class parent:
def __init__(self, constant):
self.constant = constant
def addconstant(self, number):
return self.constant + number
พารามิเตอร์ self.constant
มีความสำคัญอย่างยิ่งต่อการใช้งานของคลาส เนื่องจากเมธอด addconstant
ขึ้นอยู่กับพารามิเตอร์นั้น ดังนั้นเมธอด __init__
จะดูแลการบังคับให้ผู้ใช้กำหนดค่าของพารามิเตอร์นี้ จนถึงตอนนี้ดีมาก
ตอนนี้ฉันกำหนดคลาสย่อยดังนี้:
class child(parent):
def __init__(self):
pass
ไม่มีอะไรหยุดฉันไม่ให้สร้างอินสแตนซ์ของคลาสนี้ แต่เมื่อฉันพยายามใช้ addconstant
มันจะพังอย่างเห็นได้ชัด
b = child()
b.addconstant(5)
AttributeError: 'child' object has no attribute 'constant'
ทำไม Python ถึงยอมทำเช่นนี้!? ฉันรู้สึกว่า Python ยืดหยุ่นเกินไปและทำให้จุด OOP และการห่อหุ้มแตกสลายไป หากฉันต้องการขยายคลาสเพื่อใช้ประโยชน์จากการสืบทอด ฉันจะต้องระมัดระวังและรู้รายละเอียดบางประการเกี่ยวกับการใช้งานคลาส ในกรณีนี้ ฉันต้องรู้ว่าการบังคับให้ผู้ใช้ตั้งค่าคงที่พารามิเตอร์ constant
นั้นเป็นพื้นฐานที่จะไม่ทำลายการใช้งานของคลาส สิ่งนี้ไม่ได้ขัดต่อหลักการห่อหุ้มใช่ไหม
constant
โทรparent.__init__
ทำ - person chepner   schedule 19.02.2021