Hướng dẫn python iterate over class attributes - python lặp qua các thuộc tính lớp

Giả sử bạn có một lớp học như

>>> class Cls[object]:
...     foo = 1
...     bar = 'hello'
...     def func[self]:
...         return 'call me'
...
>>> obj = Cls[]

Gọi

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
5 trên đối tượng cung cấp cho bạn tất cả các thuộc tính của đối tượng đó, bao gồm các thuộc tính đặc biệt của Python. Mặc dù một số thuộc tính đối tượng có thể gọi được, chẳng hạn như các phương thức.

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']

Bạn luôn có thể lọc ra các phương thức đặc biệt bằng cách sử dụng danh sách hiểu.

>>> [a for a in dir[obj] if not a.startswith['__']]
['bar', 'foo', 'func']

hoặc nếu bạn thích bản đồ/bộ lọc.

>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']

Nếu bạn muốn lọc các phương thức, bạn có thể sử dụng

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
6 tích hợp làm kiểm tra.

>>> [a for a in dir[obj] if not a.startswith['__'] and not callable[getattr[obj, a]]]
['bar', 'foo']

Bạn cũng có thể kiểm tra sự khác biệt giữa lớp của bạn và đối tượng thể hiện của nó bằng cách sử dụng.

>>> set[dir[Cls]] - set[dir[object]]
set[['__module__', 'bar', 'func', '__dict__', 'foo', '__weakref__']]

Lặp lại các thuộc tính của một đối tượng trong Python #

Lặp lại các thuộc tính của một đối tượng:

  1. Sử dụng chức năng
    >>> filter[lambda a: not a.startswith['__'], dir[obj]]
    ['bar', 'foo', 'func']
    
    0 để lấy danh sách tên của các thuộc tính của đối tượng.
  2. Tùy chọn lọc các thuộc tính bắt đầu với hai dấu gạch dưới và phương thức.
  3. Sử dụng vòng lặp
    >>> dir[obj]
    ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
    
    9 để lặp lại các thuộc tính của đối tượng.

Copied!

class Employee[]: cls_id = 'employee' def __init__[self, name, salary]: self.name = name self.salary = salary emp1 = Employee['bobbyhadz', 100] # ✅ iterate through an object's attributes for attribute, value in emp1.__dict__.items[]: # name bobbyhadz # salary 100 print[attribute, value] # ------------------------------------------- # ✅ using vars instead of __dict__ for attribute, value in vars[emp1].items[]: # name bobbyhadz # salary 100 print[attribute, value]

Hàm Dir trả về một danh sách các tên của các thuộc tính của đối tượng và đệ quy thuộc tính của các lớp cơ sở của nó.

Bạn cũng có thể chuyển một lớp cho chức năng

>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']
0, nó không chỉ chấp nhận các trường hợp.

Copied!

class Employee[]: cls_id = 'employee' def __init__[self, name, salary]: self.name = name self.salary = salary emp1 = Employee['bobbyhadz', 100] # 👇️ {'name': 'bobbyhadz', 'salary': 100} print[emp1.__dict__]

Chúng ta có thể sử dụng phương thức

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
8 để có được một đối tượng xem chúng ta có thể lặp lại.

Copied!

class Employee[]: cls_id = 'employee' def __init__[self, name, salary]: self.name = name self.salary = salary emp1 = Employee['bobbyhadz', 100] for attribute, value in emp1.__dict__.items[]: # name bobbyhadz # salary 100 print[attribute, value]

Phương thức Dict.Items trả về một chế độ xem mới về các mục của từ điển [[khóa, giá trị]].

Bước cuối cùng là sử dụng vòng lặp

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
9 để lặp lại các thuộc tính của đối tượng.

Một giải pháp thay thế cho việc sử dụng thuộc tính

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
7 là sử dụng hàm
>>> [a for a in dir[obj] if not a.startswith['__']]
['bar', 'foo', 'func']
4 tích hợp.

Copied!

class Employee[]: cls_id = 'employee' def __init__[self, name, salary]: self.name = name self.salary = salary emp1 = Employee['bobbyhadz', 100] for attribute, value in vars[emp1].items[]: # name bobbyhadz # salary 100 print[attribute, value]

Hàm VARS có một đối tượng và trả về thuộc tính

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
7 của mô -đun, lớp, thể hiện đã cho hoặc bất kỳ đối tượng nào khác có thuộc tính
>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
7.

Hàm

>>> [a for a in dir[obj] if not a.startswith['__']]
['bar', 'foo', 'func']
4 tăng
>>> [a for a in dir[obj] if not a.startswith['__']]
['bar', 'foo', 'func']
8 nếu đối tượng được cung cấp không có thuộc tính
>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
7.

Nếu bạn cần bao gồm các biến lớp khi lặp lại, hãy sử dụng hàm

>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']
0.

Lặp lại các thuộc tính của một đối tượng bằng dir [] #

Lặp lại các thuộc tính của một đối tượng:

  1. Sử dụng chức năng
    >>> filter[lambda a: not a.startswith['__'], dir[obj]]
    ['bar', 'foo', 'func']
    
    0 để lấy danh sách tên của các thuộc tính của đối tượng.
  2. Tùy chọn lọc các thuộc tính bắt đầu với hai dấu gạch dưới và phương thức.
  3. Sử dụng vòng lặp
    >>> dir[obj]
    ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
    
    9 để lặp lại các thuộc tính của đối tượng.

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
0

Hàm Dir trả về một danh sách các tên của các thuộc tính của đối tượng và đệ quy thuộc tính của các lớp cơ sở của nó.

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
1

Bạn cũng có thể chuyển một lớp cho chức năng

>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']
0, nó không chỉ chấp nhận các trường hợp.

Nếu bạn cần loại trừ các thuộc tính bắt đầu với hai dấu gạch dưới, hãy sử dụng danh sách hiểu.

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
2

Bạn có thể sử dụng hàm

>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']
4 nếu bạn cần lấy giá trị của một thuộc tính khi được đặt tên thuộc tính dưới dạng chuỗi.

Hàm GetAttr trả về giá trị của thuộc tính được cung cấp của đối tượng.

Hàm lấy các tham số sau:

TênSự mô tả
sự vậtđối tượng có thuộc tính nên được truy xuất
TênTên của thuộc tính
mặc địnhgiá trị mặc định khi thuộc tính không tồn tại trên đối tượng

Nếu lớp của bạn có các phương thức, bạn cũng có thể muốn loại trừ các phương thức khi lặp lại các thuộc tính của đối tượng.

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
3

Hàm có thể gọi được lấy một đối tượng làm đối số và trả về

>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']
5 nếu đối tượng xuất hiện có thể gọi được, nếu không
>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']
6 được trả về.

Chúng tôi đã sử dụng chức năng để loại trừ tất cả các phương thức khỏi các thuộc tính.

Nếu bạn chỉ muốn lặp lại các biến của lớp, bạn sẽ chuyển lớp vào hàm

>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']
0, chứ không phải ví dụ.

>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
4

Chúng tôi đã chuyển lớp cho hàm

>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']
0 và lọc ra tất cả các biến lớp bắt đầu bằng hai dấu gạch dưới và tất cả các phương thức lớp trước khi lặp lại.

Làm thế nào để bạn lặp lại các thuộc tính của một đối tượng trong Python?

Để lặp lại các thuộc tính của một đối tượng: Sử dụng thuộc tính __dict__ để có được một từ điển chứa các thuộc tính và giá trị của đối tượng. Sử dụng dict. Phương thức [] phương thức để có được cái nhìn của các mục từ điển. Sử dụng một vòng lặp để lặp lại các thuộc tính của đối tượng.Use a for loop to iterate over the object's attributes.

Làm thế nào để bạn truy cập các thuộc tính của một lớp trong Python?

Các thuộc tính của một lớp cũng có thể được truy cập bằng các phương thức và hàm tích hợp sau: getattr []-hàm này được sử dụng để truy cập thuộc tính của đối tượng. HasAttr [] - Hàm này được sử dụng để kiểm tra xem thuộc tính có tồn tại hay không. setAttr [] - Hàm này được sử dụng để đặt thuộc tính.getattr[] – This function is used to access the attribute of object. hasattr[] – This function is used to check if an attribute exist or not. setattr[] – This function is used to set an attribute.

Làm thế nào để bạn in tất cả các thuộc tính của một đối tượng lớp trong Python?

Sử dụng Vars [] của Python để in các thuộc tính của một đối tượng hàm Dir [], như được hiển thị ở trên, in tất cả các thuộc tính của một đối tượng Python. The dir[] function, as shown above, prints all of the attributes of a Python object.

Lớp học có thể có các thuộc tính trong Python?

Giới thiệu để lập trình hướng đối tượng [OOP] trong các lớp Python có chứa các đặc điểm gọi là thuộc tính.Chúng tôi tạo sự khác biệt giữa các thuộc tính thể hiện và thuộc tính lớp.Classes contain characteristics called Attributes. We make a distinction between instance attributes and class attributes.

Bài Viết Liên Quan

Chủ Đề