Bắt đầu ngayBắt đầu miễn phí

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")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

Xem khóa học

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)
Chỉnh sửa và Chạy Mã