Hướng dẫn python getter dict - python getter dict

Dẫn nhập

    Ở các bài trước, bạn đọc đã tìm hiểu về CÁC PHƯƠNG THỨC ĐẶC BIỆT TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON.

    Còn ở bài này, bạn đọc sẽ biết tới một số những phương thức nữa, nhưng những phương thức này không hẳn gọi là phương thức. Đó là Setters, Getters, DeletersSetters, Getters, Deleters

    Để cho bài này được giải thích một cách đơn giản. Bạn đọc tạo sẵn một class mới thay vì class Siêu Nhân mà chúng ta đã làm việc trong suốt series. class mới thay vì class Siêu Nhân mà chúng ta đã làm việc trong suốt series.

    class Kter:
        def __init__(self, ho, ten):
            self.ho = ho
            self.ten = ten
            self.email = ho + '-' + ten + '@kteam.com'
    

    Nội dung

    Để theo dõi bài này một cách tốt nhất, bạn nên có có những kiến thức cơ bản về Python trong khóa LẬP TRÌNH PYTHON CƠ BẢN

    Nếu bạn chưa có thời gian để học hết khóa trên thì hãy đảm bảo đã tìm hiểu những kiến thức sau đây

    • BIẾN và CÁC KIỂU DỮ LIỆU CƠ BẢN của Python (Số, chuỗi, List, Tuple, Dict, Set, Range)
    • Một số toán tử cơ bản (+, -, *, /, %)
    • Khối lệnh điều kiện Khối vòng lặp như VÒNG LẶP FOR, VÒNG LẶP IF)
    • HÀM

    Và đương nhiên để học tiếp bài sau, bạn phải nắm vững kiến thức ở các bài trước: 

    • LỚP & ĐỐI TƯỢNG TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON
    • KHAI BÁO THUỘC TÍNH LỚP TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON
    • CÁC PHƯƠNG THỨC LỚP TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON
    • TẠO LỚP KẾ THỪA TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI PYTHON
    • PHƯƠNG THỨC ĐẶC BIỆT TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON

    Trong bài này, Bạn và Kteam sẽ cùng tìm hiểu những nội dụng sau đây

    • Getter
    • Setter
    • Deleter

    Getter

    Giờ ta tạo một đối tượng như sau

    kter_A = Kter("Tran", "Long")

     Ở lớp Kter, ta viết thêm một regular methodregular method

    def ho_va_ten(self):
        return '{} {}'.format(self.ho, self.ten)
    

     Sau đó ta thử in một số thứ cơ bản

    print(kter_A.ho)
    print(kter_A.ten)
    print(kter_A.email)
    print(kter_A.ho_va_ten())
    

    Kết quả:

    Tran
    Long
    
    Tran Long
    

     Giờ là lúc mà ta nghịch ngợm một tí, bằng cách trước khi in ra những thông tin, ta thử tay đổi họ và tên của đối tượng kter ta vừa tạo.kter ta vừa tạo.

    kter_A.ho = "Nguyen"
    kter_A.ten = "Giau"
    
    print(kter_A.ho)
    print(kter_A.ten)
    print(kter_A.email)
    print(kter_A.ho_va_ten())
    

     Kết quả:

    Nguyen
    Giau
    
    Nguyen Giau
    

     Bạn đọc để ý, sau khi thay đổi lại họ và tên thì phương thức ho_va_ten trả lại họ và tên đúng như sau khi đã được thay đổi. Tuy nhiên về email thì lại không phải thế. Và dĩ  nhiên rồi, bạn muốn nó thay đổi thì nó cũng phải được đổi lại theo bằng “cách thủ công”. ho_va_ten trả lại họ và tên đúng như sau khi đã được thay đổi. Tuy nhiên về email thì lại không phải thế. Và dĩ  nhiên rồi, bạn muốn nó thay đổi thì nó cũng phải được đổi lại theo bằng “cách thủ công”.

    Bạn muốn email cũng được thay đổi như ho_va_ten? Vậy thì ta viết cho nó một phương thức như ho_va_ten:email cũng được thay đổi như ho_va_ten? Vậy thì ta viết cho nó một phương thức như ho_va_ten:

    def email(self):
        return self.ho + '-' + self.ten + '@kteam.com'
    

     Dĩ nhiên khi có phương thức này rồi thì bạn nhớ xóa thuộc tính email được gán trong hàm constructoremail được gán trong hàm constructor

    Khi ta chạy đoạn code:

    kter_A.ho = "Nguyen"
    kter_A.ten = "Giau"
    
    print(kter_A.ho)
    print(kter_A.ten)
    print(kter_A.email())
    print(kter_A.ho_va_ten())
    

     Kết quả:

    Nguyen
    Giau
    
    Nguyen Giau
    

     Bạn đọc để ý, sau khi thay đổi lại họ và tên thì phương thức ho_va_ten trả lại họ và tên đúng như sau khi đã được thay đổi. Tuy nhiên về email thì lại không phải thế. Và dĩ  nhiên rồi, bạn muốn nó thay đổi thì nó cũng phải được đổi lại theo bằng “cách thủ công”.classmethod. Bạn đọc xem ví dụ:

    kter_A = Kter("Tran", "Long")
    0

    Bạn muốn email cũng được thay đổi như ho_va_ten? Vậy thì ta viết cho nó một phương thức như ho_va_ten:emailho_va_ten.

    kter_A = Kter("Tran", "Long")
    1

    Kết quả:

    Nguyen
    Giau
    
    Nguyen Giau
    

     Giờ là lúc mà ta nghịch ngợm một tí, bằng cách trước khi in ra những thông tin, ta thử tay đổi họ và tên của đối tượng kter ta vừa tạo.

     Kết quả:ho_va_ten sau khi sử dụng getter. Vậy giả sử ta muốn gán lại ho_va_ten thì chuyện gì xảy ra?

    kter_A = Kter("Tran", "Long")
    3

     Bạn đọc để ý, sau khi thay đổi lại họ và tên thì phương thức ho_va_ten trả lại họ và tên đúng như sau khi đã được thay đổi. Tuy nhiên về email thì lại không phải thế. Và dĩ  nhiên rồi, bạn muốn nó thay đổi thì nó cũng phải được đổi lại theo bằng “cách thủ công”.ho_va_ten của chúng ta. Vì sao mâu thuẫn? Bản chất ho_va_ten là một phương thức, không thể gán cho một giá trị ngang như vậy được. Vì lí do đó, setter đã được sinh ra, chúng ta hãy thêm phương thức này vào lớp:

    kter_A = Kter("Tran", "Long")
    4

     Kết quả:Kết quả:

    kter_A = Kter("Tran", "Long")
    5

     Bạn đọc để ý, sau khi thay đổi lại họ và tên thì phương thức ho_va_ten trả lại họ và tên đúng như sau khi đã được thay đổi. Tuy nhiên về email thì lại không phải thế. Và dĩ  nhiên rồi, bạn muốn nó thay đổi thì nó cũng phải được đổi lại theo bằng “cách thủ công”.

    Bạn muốn email cũng được thay đổi như ho_va_ten? Vậy thì ta viết cho nó một phương thức như ho_va_ten:deleter là công cụ giúp bạn xóa những thuộc tính bạn vừa gán. Xóa ở đây là việc gán một giá trị rác (giá trị không có ý nghĩa) cho cái chúng ta muốn xóa. Và thường trong Python giá trị đó được sử dụng là None (đôi lúc là 0, hoặc là một list rỗng, tùy từng thuộc tính mà ta muốn xóa)

     Dĩ nhiên khi có phương thức này rồi thì bạn nhớ xóa thuộc tính email được gán trong hàm constructorsetter (deleter không sử dụng parameter nào khác ngoài parameter self). Ta thêm một deleter vào một lớp và sử dụng deleter như sau.

    Khi ta chạy đoạn code:

    kter_A = Kter("Tran", "Long")
    6

    Kết quả:

    kter_A = Kter("Tran", "Long")
    7

     Giờ là lúc mà ta nghịch ngợm một tí, bằng cách trước khi in ra những thông tin, ta thử tay đổi họ và tên của đối tượng kter ta vừa tạo.

     Kết quả:

     Bạn đọc để ý, sau khi thay đổi lại họ và tên thì phương thức ho_va_ten trả lại họ và tên đúng như sau khi đã được thay đổi. Tuy nhiên về email thì lại không phải thế. Và dĩ  nhiên rồi, bạn muốn nó thay đổi thì nó cũng phải được đổi lại theo bằng “cách thủ công”.class trong Python nhiều thì có thể tìm hiểu siêu lớp (meta class) ở một số tài liệu trên mạng.

    Bạn muốn email cũng được thay đổi như ho_va_ten? Vậy thì ta viết cho nó một phương thức như ho_va_ten:Luyện tập – Thử thách – Không ngại khó


     Dĩ nhiên khi có phương thức này rồi thì bạn nhớ xóa thuộc tính email được gán trong hàm constructor

    Khi ta chạy đoạn code: