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:
- Sử dụng chức năng
0 để lấy danh sách tên của các thuộc tính của đối tượng.>>> filter[lambda a: not a.startswith['__'], dir[obj]] ['bar', 'foo', 'func']
- 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.
- Sử dụng vòng lặp
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']
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:
- Sử dụng chức năng
0 để lấy danh sách tên của các thuộc tính của đối tượng.>>> filter[lambda a: not a.startswith['__'], dir[obj]] ['bar', 'foo', 'func']
- 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.
- Sử dụng vòng lặp
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']
>>> dir[obj]
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'foo', 'func']
0Hà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']
1Bạ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']
2Bạn có thể sử dụng hàm
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.>>> filter[lambda a: not a.startswith['__'], dir[obj]]
['bar', 'foo', 'func']
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:
sự vật | đối tượng có thuộc tính nên được truy xuất |
Tên | Tên của thuộc tính |
mặc định | giá 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']
3Hà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']
4Chú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.