Setter trong python là gì?

Một lớp có thể có thêm một biến [đôi khi được gọi là thuộc tính]. Khi bạn tạo các đối tượng, mỗi đối tượng đó có các giá trị duy nhất cho các biến đó

Các biến lớp không cần phải được đặt trực tiếp. chúng có thể được đặt bằng các phương thức lớp. Đây là cách hướng đối tượng và giúp bạn tránh được những sai lầm

khóa học liên quan. Hoàn thành khóa học & bài tập lập trình Python

Ví dụ

Chúng tôi tạo một lớp với một thuộc tính. Từ lớp đó, chúng tôi tạo ra một số đối tượng

1
2
3
4
5
6
class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]

Các đối tượng này không có thuộc tính [công việc] được đặt. Để thiết lập, chúng ta có thể thiết lập trực tiếp nhưng đó là một cách làm không tốt. Thay vào đó chúng ta tạo ra hai phương thức. getJob[] và setJob[]

Trong Python, trình trang trí

Monica
Monica
3 là một hàm tích hợp cho phép chúng ta xác định các phương thức có thể được truy cập như một thuộc tính

Điều này có thể hữu ích khi chúng ta muốn thêm một số hành vi bổ sung vào việc nhận hoặc thiết lập một thuộc tính hoặc khi chúng ta muốn xác định một phương thức dễ đọc hơn và dễ sử dụng hơn một phương thức truyền thống

Trước khi tìm hiểu về

Monica
Monica
3, hãy đảm bảo rằng bạn biết về Trình trang trí Python và Lập trình hướng đối tượng trong Python

Trình thu thập thuộc tính Python

Trong Python, getter là một phương thức được sử dụng để truy xuất giá trị của một thuộc tính. Nó được định nghĩa bằng cách sử dụng trình trang trí

Monica
Monica
3, cho phép truy cập phương thức giống như một thuộc tính

Hãy xem một ví dụ,

class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica

đầu ra

Monica
Monica

Trong ví dụ trên, chúng tôi đã tạo phương thức getter

Monica
Monica
1 bằng cách sử dụng trình trang trí
Monica
Monica
3 để truy cập
Monica
Monica
1 giống như một thuộc tính

Như chúng ta có thể thấy khi truy cập giá trị getter, chúng ta truy cập giá trị dưới dạng thuộc tính,

print[student.get_name]

Khi chúng tôi cố gắng truy cập giá trị dưới dạng một phương thức, sẽ xảy ra lỗi

print[student.get_name[]] # error

Trình đặt thuộc tính Python

Trong Python, một setter là một phương thức được sử dụng để đặt giá trị của một thuộc tính

Nó được xác định bằng cách sử dụng trình trang trí

Monica
Monica
4,

  • Monica
    Monica
    5 tên của thuộc tính mà setter dành cho

Hãy xem một ví dụ,

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
0

đầu ra

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
1

Trong ví dụ trên, lớp Person có hai phương thức được trang trí bằng bộ trang trí

Monica
Monica
3.
Monica
Monica
7 và
Monica
Monica
8

Trình trang trí

Monica
Monica
9 là một cách để xác định phương thức là "thiết lập" cho thuộc tính lớp

Khi phương thức này được gọi, nó cho phép chúng ta thiết lập giá trị của thuộc tính. Trong trường hợp này, phương thức thiết lập

Monica
Monica
7 lấy một giá trị làm đối số và đặt giá trị của thuộc tính
print[student.get_name]
1 thành giá trị này

Cách "Pythonic" không phải là sử dụng "getters" và "setters", mà sử dụng các thuộc tính đơn giản, như câu hỏi minh họa và

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
71 để xóa [nhưng tên được thay đổi để bảo vệ những người vô tội. nội trang]

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
8

Nếu sau này, bạn muốn sửa đổi cài đặt và nhận, bạn có thể làm như vậy mà không cần phải thay đổi mã người dùng, bằng cách sử dụng trình trang trí

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
72

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
7

[Mỗi cách sử dụng trình trang trí sao chép và cập nhật đối tượng thuộc tính trước đó, vì vậy lưu ý rằng bạn nên sử dụng cùng một tên cho mỗi hàm/phương thức đặt, nhận và xóa. ]

Sau khi xác định ở trên, cài đặt ban đầu, nhận và xóa mã là như nhau

class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
1

Bạn nên tránh điều này

class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
2

Thứ nhất, cách trên không hiệu quả vì bạn không cung cấp đối số cho trường hợp thuộc tính sẽ được đặt thành [thường là

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
73], tức là

class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
4

Thứ hai, điều này trùng lặp mục đích của hai phương pháp đặc biệt,

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
74 và
class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
75

Thứ ba, chúng ta cũng có các hàm dựng sẵn

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
76 và
class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
77

class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
9

Trình trang trí

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
78 dùng để tạo getters và setters

Ví dụ: chúng tôi có thể sửa đổi hành vi cài đặt để đặt các hạn chế đối với giá trị được đặt

Monica
Monica
1

Nói chung, chúng tôi muốn tránh sử dụng

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
72 và chỉ sử dụng các thuộc tính trực tiếp

Đây là những gì người dùng Python mong đợi. Theo quy tắc ít gây ngạc nhiên nhất, bạn nên cố gắng cung cấp cho người dùng của mình những gì họ mong đợi trừ khi bạn có lý do rất thuyết phục để làm ngược lại

trình diễn

Ví dụ: giả sử chúng tôi cần thuộc tính protected của đối tượng là một số nguyên trong khoảng từ 0 đến 100 và ngăn việc xóa thuộc tính đó bằng các thông báo thích hợp để thông báo cho người dùng về cách sử dụng đúng

Monica
Monica
3

[Lưu ý rằng

class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
10 đề cập đến
class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
11 nhưng các phương thức thuộc tính đề cập đến
class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
12. Điều này là để
class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
10 sử dụng thuộc tính thông qua API công khai, đảm bảo thuộc tính được "bảo vệ". ]

Và cách sử dụng

Monica
Monica
8

Những cái tên có quan trọng không?

vâng họ làm.

class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
14 và
class Student:
    def __init__[self, first_name]:
        self.first_name = first_name

    # define getter method
    @property
    def get_name[self]:
        return self.first_name

# create a new Student object
student = Student["Monica"]

# access the first name using data property
print[student.first_name]  # Monica

# access the first name using getter property
print[student.get_name]  # Monica
15 tạo bản sao của tài sản gốc. Điều này cho phép các lớp con sửa đổi hành vi đúng cách mà không làm thay đổi hành vi trong lớp cha

Monica
Monica
1

Bây giờ để nó hoạt động, bạn phải sử dụng các tên tương ứng

class Friend:    
def __init__[self]:
self.job = "None"

Alice = Friend[]
Bob = Friend[]
70

Tôi không chắc điều này sẽ hữu ích ở đâu, nhưng trường hợp sử dụng là nếu bạn muốn thuộc tính chỉ nhận, đặt và/hoặc xóa. Có lẽ tốt nhất là dính vào cùng một thuộc tính ngữ nghĩa có cùng tên

Phần kết luận

Bắt đầu với các thuộc tính đơn giản

Nếu sau này bạn cần chức năng xung quanh cài đặt, nhận và xóa, bạn có thể thêm chức năng đó bằng trình trang trí thuộc tính

Tại sao nên sử dụng getters và setters trong Python?

Về cơ bản, mục đích chính của việc sử dụng getters và setters trong các chương trình hướng đối tượng là để đảm bảo đóng gói dữ liệu . Các biến riêng trong python không thực sự là các trường ẩn như trong các ngôn ngữ hướng đối tượng khác.

Việc sử dụng phương pháp setter là gì?

Phương thức setter lấy một tham số và gán nó cho thuộc tính . Getters và setters cho phép kiểm soát các giá trị. Bạn có thể xác thực giá trị đã cho trong setter trước khi thực sự đặt giá trị.

setters và getters được sử dụng để làm gì?

Getters và Setters đóng vai trò quan trọng trong việc truy xuất và cập nhật giá trị của một biến bên ngoài lớp đóng gói. Một setter cập nhật giá trị của một biến, trong khi một getter đọc giá trị của một biến

Chủ Đề