Python là một ngôn ngữ lập trình hướng đối tượng. Trên thực tế, mọi thứ trong Python đều là một đối tượng [thậm chí là một lớp]. Mỗi đối tượng có một số thuộc tính được liên kết với chúng. Bây giờ, để làm việc tốt với bất kỳ đối tượng nào, bạn phải biết về các thuộc tính của nó
Do đó, trong bài viết này, chúng ta sẽ thảo luận về các đối tượng, thuộc tính và cách in các thuộc tính của các đối tượng này trong Python. Vậy hãy bắt đầu
Đối tượng trong Python là gì?
Một đối tượng là một thể hiện của một lớp. Nó thường được coi là một thực thể trong thế giới thực. Một đối tượng có thể cấu thành các thuộc tính, dữ liệu [hoặc] và một vài phương thức để thao tác trên dữ liệu đó. Nó là cần thiết để khởi tạo một lớp. Mỗi đối tượng có một bản sắc duy nhất
Chẳng hạn, coi loài người là một giai cấp. Vì vậy, mỗi con người sẽ có tên, tuổi, cân nặng, chiều cao và nhiều thuộc tính khác. Mỗi người có thể được xác định duy nhất như một đối tượng, [bao gồm tôi, bạn, bạn của bạn hoặc bất kỳ người nào khác mà bạn biết. ]
Hãy lấy một ví dụ về cách khai báo một đối tượng trong Python
# defining class human class human: def __init__[self, name, age]: self.name = name self.age = age # creating an instance of class human human1 = human["Mradula", 20] human2 = human["Jennifer", 24] # accessing object print["Human1 : ", human1.name]
Lưu ý rằng các biến tên và tuổi là thuộc tính của các đối tượng của lớp 'con người'
đầu ra
Human1 : Mradula
Ví dụ trên hiển thị cách một đối tượng được tạo [đối với lớp do người dùng định nghĩa] và được truy cập trong Python. Chúng tôi cũng đã khai báo các thuộc tính của đối tượng [ở đây, con người1 & con người2] và truy cập chúng
Bây giờ, chúng ta nên xem xét kỹ hơn các thuộc tính của một đối tượng
Thuộc tính trong Python là gì?
Một thuộc tính có thể được định nghĩa là thuộc tính của một lớp hoặc một đối tượng. Đây là các thành viên dữ liệu bên trong một lớp [hoặc đối tượng] đại diện cho các tính năng của chúng. Các thuộc tính này có thể là các thuộc tính [trạng thái hoặc giá trị] xác định một đối tượng hoặc bất kỳ phương thức nào tác động lên đối tượng đó
Chẳng hạn, hãy lấy ví dụ trước của chúng ta. lớp người. Các biến tên và tuổi được khai báo trong lớp con người thực ra là 'thuộc tính' của 'con người'. Cùng với chúng, các hành động [chức năng] như chạy, ngủ, đọc, đi bộ và bơi lội cũng là thuộc tính của 'con người'.
Bạn có thể nhầm lẫn giữa một thuộc tính và một đối tượng. Sự khác biệt giữa một đối tượng và một thuộc tính là Một đối tượng là một thực thể trong thế giới thực trong khi một thuộc tính là một đặc điểm của đối tượng đó
Các thuộc tính này thường được định nghĩa trong một lớp và được chia sẻ giữa tất cả các thể hiện [đối tượng] của lớp đó. Một đối tượng có thể được truy cập bằng các thuộc tính này
Thuộc tính cũng được phân thành hai loại
- Thuộc tính lớp
- Instance [đối tượng] Thuộc tính
Một thuộc tính Instance là một thành viên dữ liệu của một đối tượng. Nó được liên kết với các thuộc tính của một đối tượng. Vì vậy, mọi phiên bản của lớp đó sẽ có các thuộc tính phiên bản giống nhau. [Đó là mục đích của một lớp học, sau tất cả. ]. Phạm vi truy cập của họ cũng nằm trong việc tạo đối tượng
Ví dụ: tham khảo các biến 'tên' và 'tuổi' của lớp 'con người'. Đây là các biến thể hiện, được phân bổ cho từng đối tượng riêng biệt
Class Attributes là thành viên dữ liệu của cả lớp. Các thuộc tính này chia sẻ cùng một không gian bộ nhớ và được tất cả các đối tượng truy cập chung
Để tìm hiểu thêm về các thuộc tính, hãy xem bài viết của chúng tôi về các biến tĩnh trong python
Bây giờ chúng ta đã tìm hiểu về các đối tượng và thuộc tính, chúng ta đã sẵn sàng tìm hiểu cách in tất cả các thuộc tính của một đối tượng trong Python
4 cách để in tất cả các thuộc tính của một đối tượng trong Python
Để viết mã hiệu quả và truy cập vào một đối tượng để có được chức năng đầy đủ của nó, người ta phải nhận thức được tất cả các thuộc tính của đối tượng. Do đó, đưa ra dưới đây là các cách khác nhau để in tất cả các thuộc tính của một đối tượng trong Python
01] Sử dụng phương thức __dir__[]
Python cung cấp một phương thức dựng sẵn để in ra tất cả các thuộc tính của một đối tượng [Bây giờ, đối tượng này có thể là bất kỳ thứ gì trong Python]. Phương thức này còn được gọi là phương thức ma thuật hoặc phương thức dunder trong Python
cú pháp
in [tên đối tượng. __dir__[]]
Hãy chuyển sang một ví dụ để hiểu rõ hơn
# listing out all attributes of an object in Python # create a class class Student: def __init__[self, name, id, age]: self.name = name self.id = id self.age = age def info[self]: return f"Student name: {self.name} and id: {self.id} " # class variable var = 1 # creating object s1 = Student["Mradula", 1, 20] s2 = Student["Joel", 2, 15] print[s1.info[]] print[s1.__dir__[]]
đầu ra
Student name: Mradula and id: 1 ['name', 'id', 'age', '__module__', '__init__', 'info', 'var', '__dict__', '__weakref__', '__doc__', '__repr__', '__hash__', '__str__', '__getattribute__', '__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__new__', '__reduce_ex__', '__reduce__', '__subclasshook__', '__init_subclass__', '__format__', '__sizeof__', '__dir__', '__class__']
Lưu ý rằng phương thức này trả về một danh sách với các thuộc tính do người dùng xác định được ưu tiên
Bạn sẽ ngạc nhiên khi biết rằng, phương thức __dir__[] cũng có thể được sửa đổi. Bạn có thể định nghĩa phương thức __dir__[] trong một lớp để ghi đè phương thức __dir__[] mặc định. Hãy sửa đổi phương thức __dir__[] cho ví dụ trên
# listing out all attributes of an object in Python # create a class class Student: # defining the __dir__[] method def __dir__[self]: return [1, 2, 10, 5, 9] # class variable var = 1 # creating object s = Student[] # calling the __dir__[] method print[s.__dir__[]]
đầu ra
[1, 2, 10, 5, 9]
các s. Câu lệnh __dir__[] gọi phương thức do người dùng định nghĩa sẽ ghi đè phương thức dunder mặc định. Lưu ý sự khác nhau giữa đầu ra của phương thức __dir__[] mặc định và phương thức __dir__[] do người dùng định nghĩa
02] Sử dụng dir[]
Python cung cấp một hàm dựng sẵn để liệt kê tất cả các thuộc tính của một đối tượng. Hàm này trả về tất cả các thuộc tính [biến, phương thức hoặc đối tượng] được liên kết với tham số đã truyền, trong một phạm vi nhất định
cú pháp
in [dir [tham số]]
Việc chuyển tham số là tùy chọn. Nếu bạn không truyền tham số, thì hàm dir[] sẽ trả về tất cả các thuộc tính trong phạm vi cục bộ
Hãy lấy một ví dụ
# listing out all attributes of an object in Python name = "FavTutor" article = "Printing Object's attributes" # calling dir[] function with no argument print[dir[]]
đầu ra
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'article', 'name']
Thấy. Hàm dir[] trả về tất cả các thuộc tính có sẵn và do người dùng xác định trong phạm vi cục bộ
Mặc dù ví dụ trên có một danh sách nhỏ, đôi khi đầu ra đủ dài để có khả năng đọc thấp. Để giải quyết vấn đề này, Python cung cấp một mô-đun pprint
"Mô-đun pprint" được sử dụng để in danh sách theo cách được định dạng tốt. Hãy xem ví dụ dưới đây
Thí dụ. Để in các thuộc tính của các đối tượng trong Python bằng cách sử dụng hàm dir[] với một đối tượng làm đối số
________số 8_______
đầu ra
Student name: Mradula and id: 1 ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'id', 'info', 'name', 'var']
Phương thức pprint[] liên quan trực tiếp đến "bản in đẹp". Lưu ý cách mỗi tính năng được in trên một dòng riêng biệt. Điều này cải thiện khả năng đọc của đầu ra
Bây giờ chúng ta đã thấy một số ví dụ về dir[], hãy xem qua một số điểm chính về hàm dir[]
- Nó trả về một danh sách tất cả các đặc điểm của một đối tượng trong phạm vi cục bộ
- Nó gọi hàm __dir__[] bên trong. Bên trong, hàm dir[] thực hiện chức năng của nó thông qua phương thức __dir__[]
- Hàm dir[] cung cấp đầu ra được sắp xếp theo thứ tự bảng chữ cái
Trước khi chuyển sang phương thức tiếp theo, hãy so sánh các phương thức dir[] và __dir__[]
Làm việc với hàm dir[] và phương thức __dir__[]
a. Bạn đã biết rằng hàm dir[] gọi nội bộ phương thức __dir__[] để triển khai. Do đó, việc xác định phương thức __dir__[] cũng sẽ thay đổi chức năng [và do đó là đầu ra] của hàm dir[]. Hãy lấy ví dụ trên và gọi phương thức dir[]
Human1 : Mradula0
đầu ra
Human1 : Mradula1
Lưu ý sự khác biệt giữa các đầu ra được trả về bởi hàm dir[] và phương thức __dir__[]. Trong khi phương thức __dir__[] cung cấp danh sách nguyên trạng đã xác định, thì hàm dir[] tạo danh sách thuộc tính được sắp xếp
b. Bây giờ hãy lấy một ví dụ khác về sửa đổi phương thức __dir__[]. Bạn sẽ ngạc nhiên bởi kết quả.
Human1 : Mradula2
đầu ra
Human1 : Mradula3
Phương thức __dir__[] hoạt động tốt nhưng hàm dir[] tạo ra TypeError. Chắc hẳn bạn đang thắc mắc TẠI SAO
Mã đã hoạt động cho ví dụ trước, phải không? . Do đó, vì các loại, chuỗi ["alice"] và số nguyên [1,2 và phần còn lại], không thể so sánh với nhau, do đó, việc gọi phương thức dir[] trên phương thức này sẽ tạo ra lỗi
Ghi chú. Hàm dir[], khi không có phương thức __dir__[], sẽ gọi thuộc tính __dict__ để trả về danh sách tất cả các thuộc tính của một đối tượng trong Python
03] Sử dụng hàm vars[]
Python cung cấp hàm vars[] trả về một 'từ điển' của tất cả các thuộc tính của phiên bản cùng với các giá trị của chúng. Nó tương tự như các phương thức trên, điểm khác biệt duy nhất là vars[] chỉ tập trung vào các thuộc tính thể hiện và cũng trả về các giá trị của chúng cùng với chúng
cú pháp
in[vars[objectName]]
Truyền bất kỳ tham số nào cho hàm vars[] là tùy chọn. Nó cũng có thể được gọi mà không truyền bất kỳ tham số nào cho nó
Hãy lấy một vài ví dụ để hiểu các trường hợp khác nhau
a. Không truyền bất kỳ tham số nào
Human1 : Mradula4
đầu ra
Human1 : Mradula5
Lưu ý cách mỗi thuộc tính được theo sau bởi giá trị của nó
b. Truyền tham số cho hàm vars[]
Human1 : Mradula6
đầu ra
Human1 : Mradula7
Khi đối tượng [ở đây là s] được truyền dưới dạng đối số cho phương thức vars[], nó sẽ tạo ra một từ điển chỉ các thuộc tính được liên kết với thể hiện, loại bỏ các thuộc tính còn lại [như trong ví dụ trên]
Ngoài ra, lưu ý rằng hàm vars[] gọi bên trong thuộc tính __dict__ để triển khai. Thuộc tính __dict__ đơn giản là một từ điển chứa tất cả các thuộc tính của đối tượng đó
Hãy xem đầu ra khi chúng ta sử dụng thuộc tính __dict__ trong ví dụ trên
Human1 : Mradula8
đầu ra
Human1 : Mradula9
Đầu ra là như nhau. [Do đó, hãy nhớ rằng hàm vars[] sẽ tạo ra lỗi khi chuyển qua một đối tượng không có thuộc tính __dir__. ]
04] Sử dụng module kiểm tra
Mô-đun kiểm tra trong Python giúp kiểm tra một số mô-đun hoặc đối tượng có trong mã. Nó bao gồm một số hàm hữu ích cung cấp thông tin về các đối tượng trực tiếp [như lớp, hàm, đối tượng và phương thức]. Nó có thể được sử dụng để có được một phân tích về các đối tượng, ví dụ, để kiểm tra nội dung của một lớp hoặc để hiển thị thông tin về một đối tượng
Để in tất cả các thuộc tính của một đối tượng trong Python, bạn có thể sử dụng chức năng 'getmembers[]' của mô-đun kiểm tra. Hàm này trả về danh sách bộ chứa các thuộc tính cùng với giá trị của chúng
Tham khảo hình ảnh bên dưới để dễ đọc hơn về đầu ra
Hãy lấy một ví dụ để hiểu rõ hơn
# listing out all attributes of an object in Python # create a class class Student: def __init__[self, name, id, age]: self.name = name self.id = id self.age = age def info[self]: return f"Student name: {self.name} and id: {self.id} " # class variable var = 1 # creating object s1 = Student["Mradula", 1, 20] s2 = Student["Joel", 2, 15] print[s1.info[]] print[s1.__dir__[]]0
Tôi đã sử dụng mô-đun pprint để tăng khả năng đọc đầu ra
đầu ra
# listing out all attributes of an object in Python # create a class class Student: def __init__[self, name, id, age]: self.name = name self.id = id self.age = age def info[self]: return f"Student name: {self.name} and id: {self.id} " # class variable var = 1 # creating object s1 = Student["Mradula", 1, 20] s2 = Student["Joel", 2, 15] print[s1.info[]] print[s1.__dir__[]]1
Lưu ý rằng danh sách này chứa các bộ dữ liệu theo thứ tự được sắp xếp. Vì vậy, hàm getmembers[] trả về một danh sách được sắp xếp gồm tất cả các thuộc tính của một đối tượng trong Python, cùng với các giá trị tương ứng của chúng
Phần kết luận
Cho đến giờ chúng ta đã thảo luận về các cách khác nhau để in tất cả các thuộc tính của một đối tượng trong Python. Nhưng trước khi chuyển sang liệt kê tất cả các thuộc tính, bạn phải có khả năng phân biệt giữa thuộc tính thể hiện và thuộc tính lớp. Vì vậy, hãy thử và kiểm tra các phương pháp này cùng với các biến thể của chúng để hiểu rõ hơn về chúng