Trong mã python được viết tốt, bạn có thể nhận thấy trình trang trí
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
7 ngay trước định nghĩa phương thứcTrong hướng dẫn này, bạn sẽ hiểu rõ chính xác con trăn
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
7 làm gì, khi nào sử dụng nó và cách sử dụng nó. Tuy nhiên, hướng dẫn này giả định rằng bạn có một ý tưởng cơ bản về các lớp python là gì. Bởi vì # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
7 thường được sử dụng bên trong một2. @property làm gì?
Vậy @property làm gì?
@property cho phép một phương thức được truy cập dưới dạng một thuộc tính thay vì dưới dạng một phương thức có
class Person[]:
def __init__[self, firstname, lastname]:
self.first = firstname
self.last = lastname
self.fullname = self.first + ' '+ self.last
def email[self]:
return '{}.{}@email.com'.format[self.first, self.last]
0. Nhưng tại sao nó thực sự cần thiết và bạn có thể sử dụng nó trong những tình huống nào?Để hiểu điều này, hãy tạo một lớp
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
3 chứa # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
4, # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
5 và # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6 của người đó làm thuộc tính và có một phương thức # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
7 cung cấp email của người đóclass Person[]:
def __init__[self, firstname, lastname]:
self.first = firstname
self.last = lastname
self.fullname = self.first + ' '+ self.last
def email[self]:
return '{}.{}@email.com'.format[self.first, self.last]
Hãy tạo một thể hiện của Người 'selva prabhakaran' và in các thuộc tính
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
3. Khi nào nên sử dụng @property?
Càng xa càng tốt
Bây giờ, bằng cách nào đó bạn quyết định thay đổi tên
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
5 của người đóĐây là một sự thật thú vị về các lớp python. Nếu bạn thay đổi giá trị của một thuộc tính bên trong một lớp, các thuộc tính khác bắt nguồn từ thuộc tính bạn vừa thay đổi sẽ không tự động cập nhật
Ví dụ. Bằng cách thay đổi tên
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
9, bạn có thể mong đợi thuộc tính # Changing the `last` name does not change `self.full` name, but email[] works
person.last = 'prasanna'
print[person.last] #> prasanna
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
0, có nguồn gốc từ # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
9 để cập nhật. Nhưng không ngờ lại không. Điều này có thể cung cấp thông tin có khả năng gây hiểu nhầm về # Changing the `last` name does not change `self.full` name, but email[] works
person.last = 'prasanna'
print[person.last] #> prasanna
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
2Tuy nhiên, lưu ý rằng ________ 07 hoạt động như dự định, mặc dù nó có nguồn gốc từ ________ 09
# Changing the `last` name does not change `self.full` name, but email[] works
person.last = 'prasanna'
print[person.last] #> prasanna
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
Vì vậy, một giải pháp khả thi là chuyển đổi thuộc tính
# Changing the `last` name does not change `self.full` name, but email[] works
person.last = 'prasanna'
print[person.last] #> prasanna
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
5 thành phương thức # Changing the `last` name does not change `self.full` name, but email[] works
person.last = 'prasanna'
print[person.last] #> prasanna
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6, do đó, nó sẽ cung cấp giá trị chính xác như phương thức # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
7 đã làm. Hãy làm nó# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
8Bây giờ giải pháp chuyển đổi sang phương thức hoạt động
Nhận khóa học Python hoàn chỉnh miễn phí
Đối mặt với tình huống tương tự như những người khác?
Xây dựng sự nghiệp khoa học dữ liệu của bạn với bằng cấp được ngành công nhận trên toàn cầu. Có được tư duy, sự tự tin và các kỹ năng khiến Nhà khoa học dữ liệu trở nên có giá trị
[email protected] 8 với thuộc tính
class Person[]:
def __init__[self, firstname, lastname]:
self.first = firstname
self.last = lastname
self.fullname = self.first + ' '+ self.last
def email[self]:
return '{}.{}@email.com'.format[self.first, self.last]
0 thay vì # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
80, nên nó sẽ phá vỡ bất kỳ mã nào đã sử dụng thuộc tính # Changing the `last` name does not change `self.full` name, but email[] works
person.last = 'prasanna'
print[person.last] #> prasanna
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
5. Nếu bạn đang xây dựng một sản phẩm/công cụ, rất có thể các nhà phát triển và người dùng khác của mô-đun của bạn đã sử dụng nó tại một thời điểm nào đó và tất cả mã của họ cũng sẽ bị hỏng.Vì vậy, một giải pháp tốt hơn [không vi phạm mã của người dùng của bạn] là chuyển đổi phương thức thành một thuộc tính bằng cách thêm một trình trang trí
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
7 trước định nghĩa của phương thức. Bằng cách này, phương thức # Changing the `last` name does not change `self.full` name, but email[] works
person.last = 'prasanna'
print[person.last] #> prasanna
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6 có thể được truy cập như một thuộc tính thay vì như một phương thức với class Person[]:
def __init__[self, firstname, lastname]:
self.first = firstname
self.last = lastname
self.fullname = self.first + ' '+ self.last
def email[self]:
return '{}.{}@email.com'.format[self.first, self.last]
0. Xem ví dụ bên dưới# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
34. Phương thức setter – Khi nào nên sử dụng nó và Cách viết?
Bây giờ bạn có thể truy cập vào
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6 giống như một thuộc tínhTuy nhiên có một vấn đề cuối cùng
Người dùng của bạn sẽ muốn thay đổi thuộc tính
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6 vào một thời điểm nào đó. Và bằng cách đặt nó, họ hy vọng nó sẽ thay đổi giá trị của tên # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
4 và # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
5 mà từ đó # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6 được lấy từ đầuNhưng thật không may, cố gắng đặt giá trị của
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6 sẽ tạo ra một # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
31# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
1Làm thế nào để giải quyết điều này?
Chúng tôi xác định một phương thức
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
32 tương đương sẽ được gọi mỗi khi người dùng đặt giá trị cho thuộc tính nàyBên trong phương thức setter này, bạn có thể sửa đổi giá trị của các biến sẽ được thay đổi khi giá trị của
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6 được đặt/thay đổiTuy nhiên, có một số quy ước bạn cần tuân theo khi xác định phương thức setter
- Phương thức setter phải có cùng tên với phương thức tương đương mà
7 trang trí# Create a Person object person = Person['selva', 'prabhakaran'] print[person.first] #> selva print[person.last] #> prabhakaran print[person.fullname] #> selva prabhakaran print[person.email[]] #> [email protected]
- Nó chấp nhận làm đối số giá trị mà người dùng đặt cho thuộc tính
Cuối cùng, bạn cần thêm một trình trang trí
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
35 ngay trước định nghĩa phương thứcKhi bạn thêm trình trang trí
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
35 vào nó, phương thức này sẽ được gọi mỗi khi thuộc tính [# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6 trong trường hợp này] được đặt hoặc thay đổi. Xem bên dưới# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
7của bạn đi. Chúng tôi đặt giá trị mới thành
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
80, # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
39 và # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
10 cũng được cập nhật. Lớp # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
3 của chúng ta bây giờ sẽ tự động cập nhật các thuộc tính dẫn xuất [thuộc tính] khi một trong các thuộc tính cơ sở thay đổi và ngược lại5. phương pháp xóa
Tương tự như setter, phương thức của deleter xác định điều gì sẽ xảy ra khi một thuộc tính bị xóa
Bạn có thể tạo phương thức xóa bằng cách xác định phương thức cùng tên và thêm trình trang trí
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
12. Xem cách triển khai bên dưới# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
3Trong trường hợp trên, thuộc tính
# Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
39 và # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
10 trả về Không có, sau khi # Create a Person object
person = Person['selva', 'prabhakaran']
print[person.first] #> selva
print[person.last] #> prabhakaran
print[person.fullname] #> selva prabhakaran
print[person.email[]] #> [email protected]
6 bị xóa6. Phần kết luận
Vì vậy, để tóm tắt
- Khi nào nên sử dụng @property decorator?
Khi một thuộc tính được dẫn xuất từ các thuộc tính khác trong lớp, do đó, thuộc tính dẫn xuất sẽ cập nhật bất cứ khi nào các thuộc tính nguồn bị thay đổi. - Làm cách nào để tạo @property?
Tạo thuộc tính làm thuộc tính bằng cách xác định thuộc tính đó dưới dạng hàm và thêm trình trang trí @property trước định nghĩa fn. - Khi nào xác định phương thức thiết lập cho thuộc tính?
Thông thường, nếu bạn muốn cập nhật thuộc tính nguồn bất cứ khi nào thuộc tính được đặt. Nó cũng cho phép bạn xác định bất kỳ thay đổi nào khác.
Hy vọng mục đích của @property đã rõ ràng và bây giờ bạn đã biết khi nào và làm thế nào để sử dụng nó. Nếu bạn đã làm, xin chúc mừng. tôi sẽ gặp bạn trong lần tiếp theo
Selva Prabhakaran
Selva là Tác giả chính và Biên tập viên của Machine Learning Plus, với hơn 4 triệu độc giả. Anh ấy là tác giả của các khóa học và sách với hơn 100 nghìn sinh viên và là Nhà khoa học dữ liệu chính của một công ty toàn cầu