[英]How to know attributes vs methods in Python object?
How do you know attributes vs methods in Python object?您如何知道 Python object 中的属性与方法? When using the dir method it only list everything for example dir('string').使用 dir 方法时,它只列出所有内容,例如 dir('string')。
You can test the attributes's type:您可以测试属性的类型:
from types import MethodType
from pprint import pprint
class A(object):
def __init__(self) -> None:
self._field = 3
self._callable_field = lambda x: x
def my_method(self):
pass
@classmethod
def my_static_method(cls):
pass
def __str__(self) -> str:
return repr(self)
A.another_method = lambda self: None
a = A()
pprint([(d, type(getattr(a,d)) is MethodType) for d in dir(a)])
prints印刷
[('__class__', False),
('__delattr__', False),
('__dict__', False),
('__dir__', False),
('__doc__', False),
('__eq__', False),
('__format__', False),
('__ge__', False),
('__getattribute__', False),
('__gt__', False),
('__hash__', False),
('__init__', True),
('__init_subclass__', False),
('__le__', False),
('__lt__', False),
('__module__', False),
('__ne__', False),
('__new__', False),
('__reduce__', False),
('__reduce_ex__', False),
('__repr__', False),
('__setattr__', False),
('__sizeof__', False),
('__str__', True), # <<<<<<<<<<
('__subclasshook__', False),
('__weakref__', False),
('_callable_field', False), # <<<<<<<<<<
('_field', False), # <<<<<<<<<<
('another_method', True), # <<<<<<<<<<
('my_method', True), # <<<<<<<<<<
('my_static_method', True)] # <<<<<<<<<<
Note that this won't print True
for builtin methods that are not explicitly defined in the class definition (or attached later, see __str__
and another_method
above).请注意,对于未在 class 定义中明确定义的内置方法(或稍后附加,请参阅上面的__str__
和another_method
),这不会打印True
。 Note, also, that unlike testing for callable
, this actually catches the distinction between methods and callable attributes.另请注意,与对callable
的测试不同,这实际上抓住了方法和可调用属性之间的区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.