要添加到 John La Rooy 的答案(和 bugmenot123 的评论),很容易扩展代码以检查任意属性名称。
让我们定义一个具有属性的类及其实例:
class MyClass:
not_a_property = None
@property
def my_property(self):
pass
def my_method(self):
pass
my_object = MyClass()
我们可以简单地使用getattr
带有任意字符串的 any 来检查给定对象的类的属性是否是属性,就像 John La Rooy 演示的那样:
>>> isinstance(getattr(type(my_object), 'not_a_property'), property)
False
>>> isinstance(getattr(type(my_object), 'my_property'), property)
True
>>> isinstance(getattr(type(my_object), 'my_method'), property)
False
要获取对象的所有属性方法名称,您可以循环遍历dir
该类,如下所示:
for attr in dir(type(my_object)):
print(
f'{attr} is a property method:'.ljust(42),
isinstance(getattr(type(my_object), attr), property)
)
上面的循环打印以下输出:
__class__ is a property method: False
__delattr__ is a property method: False
__dict__ is a property method: False
__dir__ is a property method: False
__doc__ is a property method: False
__eq__ is a property method: False
__format__ is a property method: False
__ge__ is a property method: False
__getattribute__ is a property method: False
__gt__ is a property method: False
__hash__ is a property method: False
__init__ is a property method: False
__init_subclass__ is a property method: False
__le__ is a property method: False
__lt__ is a property method: False
__module__ is a property method: False
__ne__ is a property method: False
__new__ is a property method: False
__reduce__ is a property method: False
__reduce_ex__ is a property method: False
__repr__ is a property method: False
__setattr__ is a property method: False
__sizeof__ is a property method: False
__str__ is a property method: False
__subclasshook__ is a property method: False
__weakref__ is a property method: False
my_method is a property method: False
my_property is a property method: True
not_a_property is a property method: False