Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu về trình trang trí thuộc tính Python [@property] và quan trọng hơn là cách thức hoạt động của nó
Giới thiệu về trình trang trí thuộc tính Python
Trong hướng dẫn trước, bạn đã học cách sử dụng lớp thuộc tính để thêm một thuộc tính vào một lớp. Đây là cú pháp của lớp
4Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Code language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
Sau đây định nghĩa một lớp
5 với hai thuộc tínhCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
6 vàCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
7Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Để định nghĩa một getter cho thuộc tính
7, bạn sử dụng lớpCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
4 như thế này________số 8Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
4 chấp nhận một getter và trả về một đối tượng thuộc tínhCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Sau đây tạo một thể hiện của lớp
5 và nhận giá trị của thuộc tínhCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
7 thông qua thể hiệnCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
2
class property[fget=None, fset=None, fdel=None, doc=None]
Code language: Python [python]
đầu ra
3Code language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
Ngoài ra, bạn có thể gọi trực tiếp phương thức
3 của đối tượngCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self._age = age def get_age[self]: return self._age age = property[fget=get_age]
5 như thế nàyCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
6Code language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
Vì vậy, để lấy
7 của đối tượngCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
5, bạn có thể sử dụng thuộc tínhCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
7 hoặc phương thứcCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
3. Điều này tạo ra một sự dư thừa không cần thiếtCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self._age = age def get_age[self]: return self._age age = property[fget=get_age]
Để tránh sự dư thừa này, bạn có thể đổi tên phương thức
3 thành phương thứcCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self._age = age def get_age[self]: return self._age age = property[fget=get_age]
20 như thế nàyCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
3Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
21 chấp nhận một giá trị có thể gọi được [tuổi] và trả về một giá trị có thể gọi được. Vì vậy, nó là một vật trang trí. Do đó, bạn có thể sử dụng trình trang tríCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
22 để trang trí phương phápCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
20 như sau
class property[fget=None, fset=None, fdel=None, doc=None]
Code language: Python [python]
7Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Vì vậy, bằng cách sử dụng trình trang trí
22, bạn có thể đơn giản hóa định nghĩa thuộc tính cho một lớpCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
trang trí setter
Sau đây thêm phương thức setter [______125] để gán giá trị cho thuộc tính
26 cho lớpCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
5Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
2Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Để gán
25 choCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
29 của đối tượng thuộc tínhCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
7, bạn gọi phương thứcCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
31 của đối tượng thuộc tínhCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
7 như sauCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
8Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Phương thức
31 chấp nhận một khả năng gọi được và trả về một khả năng gọi khác [một đối tượngCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
4]. Vì vậy, bạn có thể sử dụng decoratorCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
35 cho phương thức
class property[fget=None, fset=None, fdel=None, doc=None]
Code language: Python [python]
36 như thế nàyCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
0Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Bây giờ, bạn có thể thay đổi phương thức
36 thành phương thứcCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
20 và sử dụng thuộc tínhCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
7 trong phương thứcCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
60Code language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
1Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Để tóm tắt, bạn có thể sử dụng các công cụ trang trí để tạo thuộc tính bằng cách sử dụng mẫu sau
2Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
Trong mẫu này,
61 là thuộc tính riêng vàCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
62 là tên thuộc tínhCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
Ví dụ sau sử dụng các bộ trang trí
22 để tạo các thuộc tínhCode language: Python [python]
class property[fget=None, fset=None, fdel=None, doc=None]
6 vàCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
7 trong lớpCode language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age
5Code language: Python [python]
class Person: def __init__[self, name, age]: self.name = name self.age = age