Là một ngôn ngữ hướng đối tượng, Python cung cấp hai phạm vi cho các thuộc tính: thuộc tính lớp và thuộc tính thể hiện. Hãy tưởng tượng một lớp giống như một bản thiết kế mà từ đó các đối tượng khác nhau được tạo ra.
Mỗi đối tượng là một thể hiện của một lớp. Chúng ta có thể lấy lớp học con chó là một ví dụ để giải thích điều này.
Chó có thể có dữ liệu như màu sắc, tên hoặc giống, và các hành vi như: chạy, sủa, ngồi, ăn, và nhiều hơn nữa. Dữ liệu trong một lớp được gọi là các thuộc tính và hành vi được gọi là phương thức.
Ví dụ về một con chó tên là Nemo Nemo:
Lớp học -> Chó
Thuộc tính-> & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; tên: nemo
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; màu: đen
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; giống: Golden Retriever
Phương thức-> & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bark
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; chạy
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ăn
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ngồi
Vì vậy, đối tượng của chúng tôi về lớp học chó, tên là Nemo, màu sắc của nó là màu đen và nó là một chú chó tha mồi vàng. Anh ta có thể sủa, chạy, ăn và ngồi.
Thuộc tính thể hiện
Một thuộc tính thể hiện là một biến Python chỉ thuộc về một đối tượng. Nó chỉ có thể truy cập trong phạm vi của đối tượng và nó được xác định bên trong hàm tạo hàm của một lớp. Ví dụ, __init __ [tự, ..].
Thuộc tính lớp
Một thuộc tính lớp là một biến Python thuộc về một lớp chứ không phải là một đối tượng cụ thể. Điều này được chia sẻ giữa tất cả các đối tượng khác của cùng một lớp và được xác định bên ngoài hàm tạo hàm __init __ [tự, Hồi], của lớp.
Sự khác biệt giữa thuộc tính lớp và phiên bản
Sự khác biệt là các thuộc tính lớp được chia sẻ bởi tất cả các trường hợp. Khi bạn thay đổi giá trị của thuộc tính lớp, nó sẽ ảnh hưởng đến tất cả các trường hợp có cùng giá trị chính xác. Thuộc tính của một thể hiện mặt khác là duy nhất cho trường hợp đó.
__Dict__ là gì?
__Dict__ là một đối tượng từ điển hoặc ánh xạ được sử dụng để lưu trữ các thuộc tính của đối tượng.
Nhưng làm thế nào để Python đối phó với các thuộc tính đối tượng và lớp bằng cách sử dụng __dict__? Vâng, mỗi trường hợp được lưu trữ trong một từ điển.
Tạo ra các lớp học và ví dụ Pythonic và không pythonic
Một cách không pythonic sẽ như thế này:
class Square: def __init__[self, size=0]: if not isinstance[size, int]: raise TypeError["size must be an integer"] if size < 0: raise ValueError["size must be >= 0"] self.__size = size * size def area[self]:
return self.__sizet__width[]
Nhược điểm xảy ra khi chúng ta cần sửa đổi mã. Cách thực hiện của nó sẽ là sử dụng các phương thức thuộc tính Getter và Setter.
class Square: def __init__[self, size=0]: self.size = size @property def size[self]: return self.__size @size.setter def size[self, value]: if not isinstance[value, int]: raise TypeError["size must be an integer"] if value < 0: raise ValueError["size must be >= 0"] self.__size = value def area[self]:
return self.__size * self.__size
Ưu điểm của việc sử dụng thuộc tính cho phép chúng tôi đính kèm mã vào thuộc tính "self.Size" và bất kỳ mã nào được gán giá trị kích thước sẽ được gọi với kích thước theo kích thước def.