การใช้งาน internal attribute
ในแบบฝึกหัดนี้ จะกลับมาใช้คลาส BetterDate จากบทที่ 2
เราต้องการเพิ่มเมธอดสำหรับตรวจสอบความถูกต้องของวันที่ แต่ไม่ต้องการให้เมธอดนี้เป็นส่วนหนึ่งของ public interface ของ BetterDate
คลาส BetterDate มีอยู่แล้วในหน้าต่างสคริปต์
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียนโปรแกรมเชิงวัตถุใน Python
คำแนะนำการฝึกหัด
- เพิ่ม class attribute ชื่อ
_MAX_DAYSสำหรับเก็บจำนวนวันสูงสุดในหนึ่งเดือน ซึ่งมีค่าเป็น31 - เพิ่ม class attribute อีกตัวสำหรับเก็บจำนวนเดือนสูงสุดในหนึ่งปี ซึ่งมีค่าเป็น
12ใช้รูปแบบการตั้งชื่อที่เหมาะสมเพื่อระบุว่านี่คือ internal attribute - เพิ่มเมธอด
_is_valid()ที่คืนค่าTrueหาก attributedayและmonthมีค่าน้อยกว่าหรือเท่ากับค่าสูงสุดที่กำหนดไว้ และคืนค่าFalseในกรณีอื่น อย่าลืมอ้างอิง class attribute ด้วยชื่อของแต่ละตัว!
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Add class attributes for max number of days and months
class BetterDate:
____
def __init__(self, year, month, day):
self.year, self.month, self.day = year, month, day
@classmethod
def from_str(cls, datestr):
year, month, day = map(int, datestr.split("-"))
return cls(year, month, day)
# Add _is_valid() checking day and month values
____
bd1 = BetterDate(2020, 4, 30)
print(bd1._is_valid())
bd2 = BetterDate(2020, 6, 45)
print(bd2._is_valid())