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

Nếu chúng ta muốn sử dụng một chức năng như thuộc tính hoặc thuộc tính, chúng ta có thể sử dụng trình trang trí @property trong lập trình python. @property trong python là một công cụ trang trí. Trình trang trí @property là trình trang trí tích hợp có trong hàm property()

Chúng ta cũng có thể sử dụng hàm property() để định nghĩa các thuộc tính của lớp python

@property trong Python là gì?

Để tìm hiểu về @property trong python, trước tiên chúng ta nên biết thuật ngữ - decorator. Decorator là một loại hàm rất mạnh và đặc biệt trong python. Một trình trang trí lấy một hàm khác làm đối số của nó và nó trả về một hàm khác với hành vi đã sửa đổi

@property cũng là một trang trí. Nếu chúng ta muốn sử dụng một chức năng như thuộc tính hoặc thuộc tính, chúng ta có thể sử dụng trình trang trí @property. Trình trang trí @property là trình trang trí tích hợp có trong hàm property(). Hàm property() dùng để định nghĩa các thuộc tính của lớp python

Vì vậy, trình trang trí @property giúp công việc của chúng ta dễ dàng hơn, vì chúng ta không cần gọi hàm property() theo cách thủ công để lấy các thuộc tính của lớp

Chúng ta có thể sử dụng trình trang trí @property trên bất kỳ phương thức nào của một lớp và sử dụng phương thức đó làm thuộc tính

Trình trang trí @property cũng làm cho việc sử dụng getters và setters dễ dàng hơn nhiều, chúng ta sẽ tìm hiểu thêm về getters và setters ở phần sau của bài viết này

Khai báo thuộc tính

Chúng ta cũng có thể khai báo một hàm là một thuộc tính bằng cách sử dụng hàm property(), hàm thuộc tính tự trả về đối tượng của lớp thuộc tính

Cú pháp cơ bản của phương thức property() là. thuộc tính (fget, fset, fdel, doc)

  • quên. fget là một đối số tùy chọn được sử dụng để lấy giá trị của một thuộc tính. Giá trị mặc định của nó được đặt thành Không có. (một getter cơ bản)
  • fset. fset là một đối số tùy chọn được sử dụng để đặt giá trị của một thuộc tính. Giá trị mặc định của nó được đặt thành Không có. (một setter cơ bản)
  • fdel. fdel là một đối số tùy chọn được sử dụng để xóa giá trị của một thuộc tính. Giá trị mặc định của nó được đặt thành Không có. (một trình xóa cơ bản)
  • tài liệu. doc là viết tắt của docstring, nó chứa tài liệu cơ bản cho các thuộc tính của lớp. Giá trị mặc định của nó được đặt thành Không có

Những gì được trả lại bởi tài sản?

Có ba phương thức chủ yếu được liên kết với một thuộc tính trong python

  1. getter - nó được sử dụng để truy cập giá trị của thuộc tính
  2. setter - nó được sử dụng để đặt giá trị của thuộc tính
  3. deleter - nó được sử dụng để xóa thuộc tính thể hiện

Phương thức property() trả về hàm dưới dạng lớp thuộc tính bằng cách sử dụng các getters, setters và deleters này

Hãy lấy một ví dụ để hiểu rõ hơn về phương thức property()

class Person:
    def __init__(self, name):
        self.name = name

    def get_name(self):
        return self.name

    def set_name(self, new_value):
        self.name = new_value

    def delete_name(self):
        del self.name

    name = property(get_name, set_name, delete_name, 'Some sample DocString')

p1 = Person('Tom')
print("Name:", p1.name)

p1.name = 'Hardy'

del p1.name

đầu ra

Lớp ưu tiên

Hãy để chúng tôi lấy ví dụ về một lớp Person và chúng tôi sẽ khai báo một hàm cụ thể là person_name(). Chúng ta sẽ tìm hiểu cách khai báo hàm dưới dạng thuộc tính bằng phương thức property(). Phương thức thuộc tính sẽ chuyển đổi hàm thành thuộc tính

Ghi chú

Trình trang trí @property được khuyến nghị sử dụng trong trường hợp phương thức property()

Cú pháp sử dụng phương thức property()

class Person:
    # Constructor
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    # a function to get the name of the Person
    def person_name(self):
        return self.name
    
    # Setting the person_name() function as a property using the property() function.
    name_property = property(person_name)

if __name__ == "__main__":
    Jack = Person("Jack", 26)
    print("The name of the Person is:", Jack.name_property)

đầu ra

The name of the Person is: Jack

Ghi chú

Nếu không khai báo hàm dưới dạng thuộc tính thì phải gọi hàm bằng dấu ngoặc đơn hoặc dấu () sau tên hàm

Thí dụ. Jack. tên_người()

Ngược lại, chúng ta sẽ lấy địa chỉ của hàm person_name()

Sử dụng @property Decorator

Trước đó chúng ta đã học về phương thức property(). Bây giờ, chúng ta hãy lấy ví dụ tương tự về lớp Person. Chúng tôi sẽ khai báo cùng một chức năng có tên person_name(). Nhưng lần này, chúng ta sẽ tìm hiểu cách khai báo hàm dưới dạng thuộc tính bằng cách sử dụng @property decorator trong python. Trình trang trí @property trong python là kỹ thuật được sử dụng thường xuyên và thực tế hơn so với hàm property()

Cú pháp sử dụng @property decorator

class Person:
    # Constructor
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    # Setting the person_name() function as a property using the @property decorator.
    @property
    def person_name(self):
        return self.name

if __name__ == "__main__":
    Jack = Person("Jack", 26)
    print("The name of the Person is:", Jack.person_name)
    

đầu ra

The name of the Person is: Jack

Chúng ta cũng có thể sử dụng lớp thuộc tính

Tại sao chúng ta nên sử dụng @property Decorator?

  • @property decorator trong python là một cách dễ dàng hơn, dễ đọc hơn và ngắn gọn hơn để khai báo các thuộc tính
  • Trình trang trí @property trong python là một ví dụ dễ hiểu về khả năng sử dụng lại mã và tên biến. Do đó, chúng ta có thể sử dụng lại cùng tên của một thuộc tính để tránh tạo tên mới cho getters, setters và deleters
  • sử dụng trình trang trí @property trong python, chúng ta có thể dễ dàng lấy, đặt và xóa các giá trị bằng cách tránh truy cập hoặc sửa đổi dữ liệu trực tiếp chỉ bằng một đối tượng

Người thiết lập tài sản

Trong ví dụ trên, chúng ta đã thấy cú pháp và cách sử dụng @property decorator. Vấn đề chính với trình trang trí @property được sử dụng trong lớp Person là chúng ta không thể sử dụng thuộc tính để sửa đổi các thuộc tính hoặc giá trị của lớp. Trình trang trí @property chỉ có thể được sử dụng để truy cập giá trị được trả về bởi hàm person_name(). Chúng tôi không thể sửa đổi giá trị bằng cách chỉ sử dụng trình trang trí @property trong python

Python có một phương thức trang trí đặc biệt gọi là phương thức setter giúp sửa đổi giá trị của hàm. Cú pháp khai báo decorator phương thức setter là. @tên tài sản. người định cư

Hãy lấy cùng một ví dụ về lớp Person và tìm hiểu cách sử dụng phương thức trang trí setter để sửa đổi giá trị của một hàm

class Person:
    # Constructor
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # Setting the person_name() function as a property using the @property decorator.
    @property
    def person_name(self):
        return self.name

    # Setting the person_name() as a setter decorator.
    @person_name.setter
    def person_name(self, new_name):
        self.name = new_name

if __name__ == "__main__":
    Jack = Person("Jack", 26)
    print("The old name of the Person is:", Jack.person_name)

    new_name = "Jack Sparrow"
    # modifying the name of the Person.
    Jack.person_name = new_name

    print("The new name of the Person is:", Jack.person_name)

đầu ra

The old name of the Person is: Jack
The new name of the Person is: Jack Sparrow

Trình xóa thuộc tính

Cũng giống như phương thức setter, python có phương thức deleter dùng để xóa thuộc tính của một lớp. Cú pháp khai báo trình trang trí phương thức deleter là. @tên tài sản. thợ xóa

Sau khi thuộc tính bị xóa, không thể truy cập thuộc tính đó bằng cùng một phiên bản

Khi chúng ta sử dụng từ khóa del với tên lớp, phương thức deleter được gọi sẽ xóa thuộc tính của lớp

Hãy lấy cùng một ví dụ về lớp Person và tìm hiểu cách sử dụng phương thức trang trí deleter để xóa thuộc tính name của lớp Person

class Person:
    # Constructor
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # Setting the person_name() function as a property using the @property decorator.
    @property
    def person_name(self):
        return self.name

    # Setting the person_name() as a deleter decorator.
    @person_name.deleter
    def person_name(self):
        print(self.name, "is deleted.")
        del self.name 


if __name__ == "__main__":
    Jack = Person("Jack", 26)
    print("The name of the Person is:", Jack.person_name)

    del Jack.person_name

    print("The name of the Person is:", Jack.person_name)

đầu ra

________số 8

Ghi chú

Như chúng ta có thể thấy trong ví dụ minh họa ở trên, sau khi chúng ta gọi phương thức deleter, thuộc tính name đã bị xóa. Vì vậy, khi chúng tôi cố gắng truy cập tên sau khi xóa, đã xảy ra lỗi cho biết đối tượng 'Người' không có thuộc tính 'tên'

Phương thức xóa không đặt giá trị thành Không, phương thức xóa sẽ xóa giá trị khỏi lớp

Lớp không có Getters và Setters

Hãy để chúng tôi lấy ví dụ về một lớp Sinh viên sẽ lưu trữ tên và số thứ tự của sinh viên. Chúng ta sẽ tạo các đối tượng cho lớp Sinh viên và sẽ sử dụng các đối tượng của lớp Sinh viên để lấy và đặt các giá trị của lớp

Tuy nhiên, việc sử dụng Đối tượng để cài đặt và nhận các giá trị không được khuyến nghị do các vấn đề về bảo mật dữ liệu. Ở phần sau của bài viết này, chúng ta sẽ tìm hiểu về một số phương thức được gọi là getters và setters sẽ giúp chúng ta thiết lập và lấy các giá trị của lớp

Cùng xem cách thực hiện để hiểu rõ hơn

class Student:
    def __init__(self, name="", roll=0):
        self.name = name
        self.roll_no = roll


if __name__ == "__main__":
    Tom = Student()

    # Setting the name of the student-Tom:
    Tom.name = "Tom Hardy"
    Tom.roll_no = 5

    print(f"Name:{Tom.name}, Roll Number:{Tom.roll_no}")

đầu ra

class Person:
    # Constructor
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    # a function to get the name of the Person
    def person_name(self):
        return self.name
    
    # Setting the person_name() function as a property using the property() function.
    name_property = property(person_name)

if __name__ == "__main__":
    Jack = Person("Jack", 26)
    print("The name of the Person is:", Jack.name_property)
0

Sử dụng Getters và Setters

Trước đây chúng ta đã học về cách thiết lập và nhận các giá trị của lớp bằng cách sử dụng các đối tượng. Bây giờ chúng ta hãy tìm hiểu về hai phương thức được sử dụng phổ biến nhất là - phương thức getter và phương thức setter

Các phương thức getter và setter giúp chúng tôi bảo mật dữ liệu lớp của mình. Không có getters và setters, bất kỳ đối tượng nào cũng có thể truy cập và sửa đổi các giá trị của một lớp và

getter và setters giúp chúng ta đóng gói dữ liệu của mình trong một đối tượng bằng cách sử dụng các phương thức để dữ liệu không thể bị sửa đổi chỉ bằng cách sử dụng một đối tượng của lớp

Đố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.

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__.