Tôi tin rằng những gì bạn muốn là một cái gì đó như thế này:
một danh sách các thuộc tính từ một đối tượng
Theo ý kiến khiêm tốn của tôi, chức năng tích hợp dir()
có thể thực hiện công việc này cho bạn. Lấy từ help(dir)
đầu ra trên Python Shell của bạn:
thư mục (...)
dir([object]) -> list of strings
Nếu được gọi mà không có đối số, trả về tên trong phạm vi hiện tại.
Khác, trả về một danh sách được sắp xếp theo thứ tự các tên bao gồm (một số) các thuộc tính của đối tượng đã cho và các thuộc tính có thể truy cập từ nó.
Nếu đối tượng cung cấp một phương thức có tên __dir__
, nó sẽ được sử dụng; mặt khác, logic dir () mặc định được sử dụng và trả về:
- cho một đối tượng mô-đun: thuộc tính của mô-đun.
- đối với một đối tượng lớp: các thuộc tính của nó và đệ quy các thuộc tính của các cơ sở của nó.
- đối với bất kỳ đối tượng nào khác: thuộc tính của nó, thuộc tính của lớp và đệ quy các thuộc tính của lớp cơ sở của lớp.
Ví dụ:
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = "I am a string"
>>>
>>> type(a)
<class 'str'>
>>>
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',
'__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'_formatter_field_name_split', '_formatter_parser', 'capitalize',
'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find',
'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace',
'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition',
'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip',
'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
'translate', 'upper', 'zfill']
Khi tôi đang kiểm tra vấn đề của bạn, tôi quyết định chứng minh sự suy nghĩ của mình, với định dạng đầu ra tốt hơn dir()
.
dir_attribut.py (Python 2.7.6)
#!/usr/bin/python
""" Demonstrates the usage of dir(), with better output. """
__author__ = "ivanleoncz"
obj = "I am a string."
count = 0
print "\nObject Data: %s" % obj
print "Object Type: %s\n" % type(obj)
for method in dir(obj):
# the comma at the end of the print, makes it printing
# in the same line, 4 times (count)
print "| {0: <20}".format(method),
count += 1
if count == 4:
count = 0
print
dir_attribut.py (Python 3.4.3)
#!/usr/bin/python3
""" Demonstrates the usage of dir(), with better output. """
__author__ = "ivanleoncz"
obj = "I am a string."
count = 0
print("\nObject Data: ", obj)
print("Object Type: ", type(obj),"\n")
for method in dir(obj):
# the end=" " at the end of the print statement,
# makes it printing in the same line, 4 times (count)
print("| {:20}".format(method), end=" ")
count += 1
if count == 4:
count = 0
print("")
Mong rằng tôi đã đóng góp :).