câu trả lời hiện tại làm tốt công việc của hiển thị cho bạn làm thế nào để có được các thuộc tính của một đối tượng, nhưng không chính xác trả lời những câu hỏi mà bạn đặt ra - làm thế nào để có được những PHƯƠNG PHÁP của một đối tượng. Các đối tượng Python có một không gian tên thống nhất (khác với Ruby, nơi các phương thức và thuộc tính sử dụng các không gian tên khác nhau). Hãy xem xét ví dụ:
>>> class X(object):
... @classmethod
... def clame(cls): pass
... @staticmethod
... def stame(): pass
... def meth(self): pass
... def __init__(self):
... self.lam = lambda: None
... self.val = 23
...
>>> x = X()
>>> dir(x)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__module__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', '__weakref__',
'clame', 'lam', 'meth', 'stame', 'val']
((tách đầu ra cho dễ đọc)).
Như bạn thấy, đây là đem lại cho bạn tên của tất cả các thuộc tính - bao gồm rất nhiều các phương pháp đặc biệt mà chỉ được thừa kế từ object
, dữ liệu đặc biệt các thuộc tính như __class__
, __dict__
và __doc__
, dữ liệu mỗi dụ thuộc tính (val
) , các thuộc tính thực thi cho mỗi cá thể (lam
), cũng như các phương thức thực tế.
Nếu và khi bạn cần phải chọn lọc hơn, hãy thử:
>>> import inspect
>>> [n for n, v in inspect.getmembers(x, inspect.ismethod)]
['__init__', 'clame', 'meth']
tiêu chuẩn thư viện mô-đun inspect
là cách tốt nhất để làm mẫn bằng Python: nó được xây dựng trên đỉnh của built-in móc mẫn (ví dụ là dir
và những người nâng cao hơn) để cung cấp cho bạn các dịch vụ nội tâm hữu ích, phong phú và đơn giản. Ở đây, ví dụ, bạn thấy rằng chỉ các cá thể và các phương thức lớp được thiết kế đặc biệt bởi lớp này được hiển thị - không phải là các phương thức tĩnh, không phải các thuộc tính ví dụ cho dù có thể gọi hay không, không phải các phương thức đặc biệt được kế thừa từ object
. Nếu nhu cầu chọn lọc của bạn hơi khác, bạn có thể dễ dàng xây dựng phiên bản tinh chỉnh của riêng bạn ismethod
và chuyển nó thành đối số thứ hai của getmembers
, để điều chỉnh kết quả theo nhu cầu chính xác, chính xác của bạn.
hoạt động! cảm ơn bạn – potlee