Đối tượng thuộc tính python là gì?

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ức

Trong 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ột

2. @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]
2

Tuy 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]
8

Bâ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]
3

4. 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ính

Tuy 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ừ đầu

Như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]
1

Là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ày

Bê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 đổi

Tuy nhiên, có một số quy ước bạn cần tuân theo khi xác định phương thức setter

  1. Phương thức setter phải có cùng tên với phương thức tương đương mà
    # 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 trang trí
  2. 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ức

Khi 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]
7

củ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ại

5. 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]
3

Trong 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óa

6. Phần kết luận

Vì vậy, để tóm tắt

  1. 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.
  2. 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.
  3. 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

Đối tượng thuộc tính Python là gì?

Phương thức property[] trong Python cung cấp giao diện cho các thuộc tính của cá thể . Nó đóng gói các thuộc tính thể hiện và cung cấp một thuộc tính, giống như Java và C#. Phương thức property[] lấy các phương thức get, set và delete làm đối số và trả về một đối tượng của lớp thuộc tính.

Đối tượng thuộc tính là gì?

Đối tượng là tập hợp các thuộc tính và thuộc tính là sự kết hợp giữa tên [hoặc khóa] và giá trị. Giá trị của một thuộc tính có thể là một hàm, trong trường hợp đó, thuộc tính được gọi là một phương thức. Các đối tượng trong JavaScript, giống như trong nhiều ngôn ngữ lập trình khác, có thể được so sánh với các đối tượng trong đời thực.

Thuộc tính và setter trong Python là gì?

@property được sử dụng để lấy giá trị của thuộc tính private mà không cần sử dụng bất kỳ phương thức getter nào . Chúng ta phải đặt một dòng @property trước phương thức mà chúng ta trả về biến riêng tư. Để đặt giá trị của biến riêng tư, chúng tôi sử dụng @method_name. setter trước phương thức. Chúng ta phải sử dụng nó như một setter.

Sự khác biệt giữa thuộc tính và thuộc tính trong Python là gì?

Các thuộc tính được mô tả bằng các biến dữ liệu, ví dụ như tên, tuổi, chiều cao, v.v. Thuộc tính là loại thuộc tính đặc biệt có các phương thức getter, setter và delete như các phương thức __get__, __set__ và __delete__.

Chủ Đề