Trình khởi tạo thay thế
Python cho phép bạn định nghĩa các phương thức lớp bằng cách dùng decorator @classmethod và tham số đầu tiên đặc biệt cls. Công dụng chính của class method là định nghĩa các phương thức trả về một instance của lớp, nhưng không dùng chung đoạn mã trong __init__().
Ví dụ, bạn đang phát triển một gói time series và muốn định nghĩa lớp riêng để làm việc với ngày tháng, BetterDate. Các thuộc tính của lớp sẽ là year, month, và day. Bạn muốn có một constructor tạo đối tượng BetterDate khi truyền vào năm, tháng, ngày, nhưng cũng muốn có thể tạo BetterDate từ chuỗi như 2020-04-30.
Bạn có thể thấy các hàm sau hữu ích:
- phương thức
.split("-")sẽ tách một chuỗi tại"-"thành một mảng, ví dụ"2020-04-30".split("-")trả về["2020", "04", "30"], int()sẽ chuyển một chuỗi thành số, ví dụint("2019")là2019.
Bài tập này là một phần của khóa học
Lập trình hướng đối tượng trong Python
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
class BetterDate:
# Constructor
def __init__(self, year, month, day):
# Recall that Python allows multiple variable assignments in one line
self.year, self.month, self.day = year, month, day
# Define a class method from_str
____
def from_str(____, datestr):
# Split the string at "-" and convert each part to integer
parts = datestr.split("-")
year, month, day = int(parts[0]), ____, ____
# Return the class instance
____ ____(____, ____, ____)
bd = BetterDate.from_str('2020-04-30')
print(bd.year)
print(bd.month)
print(bd.day)