Làm thế nào để bạn kiểm tra các thuộc tính của một đối tượng trong python?

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

  1. Thuộc tính lớp
  2. 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[]

  1. 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ộ
  2. 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__[]
  3. 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 :  Mradula
0

 

đầu ra

Human1 :  Mradula
1

 

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 :  Mradula
2

 

đầu ra

Human1 :  Mradula
3

 

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 :  Mradula
4

 

đầu ra

Human1 :  Mradula
5

 

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 :  Mradula
6

 

đầu ra

Human1 :  Mradula
7

 

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 :  Mradula
8

 

đầu ra

Human1 :  Mradula
9

 

Đầ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

Làm cách nào để có danh sách tất cả các thuộc tính của một đối tượng trong Python?

Sử dụng hàm dir[] tích hợp sẵn .

Thuộc tính của một đối tượng trong Python là gì?

Một thuộc tính thể hiện/đối tượng là một biến thuộc về một [và chỉ một] đối tượng . Mỗi thể hiện của một lớp trỏ đến các biến thuộc tính của chính nó. Các thuộc tính này được định nghĩa trong hàm tạo __init__.

Chủ Đề