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 “Chó” làm 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.v. Dữ liệu trong một lớp được gọi là thuộc tính và hành vi được gọi là phương thức
Ví dụ về một chú chó tên là “Nemo”
Lớp -> Con chó
Thuộc tính-> Tên. Nemo
Màu sắc. Màu đen
Giống. chó tha mồi vàng
Phương pháp-> Vỏ cây
Chạy
Ăn
Ngồi
Vì vậy, đối tượng của lớp “Chó” của chúng ta được đặt tên là Nemo, màu của nó là Đen và đó là Golden Retriever. Anh ta có thể sủa, chạy, ăn và ngồi
Thuộc tính sơ thẩm
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 được trong phạm vi của đối tượng và nó được định nghĩa bên trong hàm tạo của một lớp. Ví dụ: __init__[bản thân,. ]
Thuộc tính lớp
Thuộc tính lớp là một Biến Python thuộc về một lớp chứ không phải 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 định nghĩa bên ngoài hàm tạo __init__[self,…], của lớp
Sự khác nhau giữa thuộc tính Class và Instance
Sự khác biệt là các thuộc tính lớp được chia sẻ bởi tất cả các phiên bản. 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 phiên bản có cùng giá trị chính xác. Mặt khác, thuộc tính của một thể hiện là duy nhất cho thể hiện đó
__dict__ là gì?
__dict__ là một từ điển hoặc đối tượng ánh xạ được sử dụng để lưu trữ các thuộc tính của đối tượng
Nhưng Python xử lý đối tượng và thuộc tính lớp bằng cách sử dụng __dict__ như thế nào?
Tạo các lớp và sơ thẩm Pythonic và không phải Pythonic
Một cách phi 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[]
Điều bất lợi xảy ra khi chúng ta cần sửa đổi mã. Cách thực hiện Pythonic 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 "bản thân. size" và bất kỳ mã nào được gán giá trị của size sẽ được gọi với size trong def size
Các thuộc tính của lớp thuộc về chính lớp đó, chúng sẽ được chia sẻ bởi tất cả các thể hiện. Các thuộc tính như vậy được định nghĩa trong các phần cơ thể của lớp thường ở trên cùng, để dễ đọc
return self.__size * self.__size3
return self.__size * self.__size4
return self.__size * self.__size5
return self.__size * self.__size6
return self.__size * self.__size7____38
return self.__size * self.__size9
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']0
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']0
return self.__size * self.__size6
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']2
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']3____44
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']5
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']6
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']7____48
return self.__size * self.__size8
return self.__size * self.__size30
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']0
return self.__size * self.__size32
return self.__size * self.__size33
return self.__size * self.__size8
return self.__size * self.__size35
return self.__size * self.__size36
return self.__size * self.__size37
return self.__size * self.__size38
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']0
return self.__size * self.__size40
return self.__size * self.__size41
return self.__size * self.__size42
return self.__size * self.__size8
return self.__size * self.__size35
return self.__size * self.__size45
return self.__size * self.__size37
return self.__size * self.__size47
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']0
return self.__size * self.__size37
return self.__size * self.__size50
đầu ra
return self.__sizet__width[]5
Thuộc tính sơ thẩm
Không giống như các thuộc tính lớp, các thuộc tính thể hiện không được chia sẻ bởi các đối tượng. Mỗi đối tượng có bản sao riêng của thuộc tính thể hiện [Trong trường hợp thuộc tính lớp, tất cả đối tượng tham chiếu đến một bản sao]
Để liệt kê các thuộc tính của một thể hiện/đối tượng, chúng ta có hai hàm. -
1. vars[]– Hàm này hiển thị thuộc tính của một thể hiện dưới dạng một từ điển.
2. dir[]– Hàm này hiển thị nhiều thuộc tính hơn hàm vars, vì nó không giới hạn đối với phiên bản. Nó cũng hiển thị các thuộc tính của lớp. Nó cũng hiển thị các thuộc tính của các lớp tổ tiên của nó.
return self.__size * self.__size51
return self.__size * self.__size52
return self.__size * self.__size4
return self.__size * self.__size54
return self.__size * self.__size6
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']2
return self.__size * self.__size57______44
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']5
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']6
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']4____362
return self.__size * self.__size8
return self.__size * self.__size64
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']6
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']4
return self.__size * self.__size67
return self.__size * self.__size8
return self.__size * self.__size69
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']0
return self.__size * self.__size6
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']2
return self.__size * self.__size73
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']4
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']5
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']6
return self.__size * self.__size37____378
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']4
return self.__size * self.__size80
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']6
return self.__size * self.__size37____378
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']4
return self.__size * self.__size85
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']0
________ 387 ________ 38 ________ 389
return self.__size * self.__size37
return self.__size * self.__size78
return self.__size * self.__size92
return self.__size * self.__size93
return self.__size * self.__size94
return self.__size * self.__size95
return self.__size * self.__size37
return self.__size * self.__size78
return self.__size * self.__size98
return self.__size * self.__size95
đầu ra
Dictionary form :{'salary': 4000, 'name': 'xyz'} ['__doc__', '__init__', '__module__', 'name', 'salary', 'show']
Bài viết này được đóng góp bởi Harsh Valecha. Nếu bạn thích GeeksforGeeks và muốn đóng góp, bạn cũng có thể viết một bài báo bằng cách sử dụng đóng góp. chuyên viên máy tính. org hoặc gửi bài viết của bạn tới donate@geeksforgeeks. tổ chức. Xem bài viết của bạn xuất hiện trên trang chính của GeeksforGeeks và trợ giúp các Geeks khác
Vui lòng viết bình luận nếu bạn thấy bất cứ điều gì không chính xác hoặc bạn muốn chia sẻ thêm thông tin về chủ đề thảo luận ở trên