Is it possible to obtain a list of all @property
decorated methods in a class? If so how?
Example:
class MyClass(object):
@property
def foo(self):
pass
@property
def bar(self):
pass
How would I obtain ['foo', 'bar']
from this class?
Anything decorated with property
leaves a dedicated object in your class namespace. Look at the __dict__
of the class, or use the vars()
function to obtain the same, and any value that is an instance of the property
type is a match:
[name for name, value in vars(MyClass).items() if isinstance(value, property)]
Demo:
>>> class MyClass(object):
... @property
... def foo(self):
... pass
... @property
... def bar(self):
... pass
...
>>> vars(MyClass)
dict_proxy({'__module__': '__main__', 'bar': <property object at 0x1006620a8>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, 'foo': <property object at 0x100662050>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__doc__': None})
>>> [name for name, value in vars(MyClass).items() if isinstance(value, property)]
['bar', 'foo']
Note that this will include anything that used property()
directly (which is what a decorator does, really), and that the order of the names is arbitrary (as dictionaries have no set order).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With