poo - liste métodos decorados @property en una clase de python
metodos magicos python 3 (1)
Cualquier cosa decorada con property
deja un objeto dedicado en el espacio de nombres de su clase. Mire el __dict__
de la clase, o use la función vars()
para obtener el mismo, y cualquier valor que sea una instancia del tipo de property
es una coincidencia:
[name for name, value in vars(MyClass).items() if isinstance(value, property)]
Manifestación:
>>> 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'']
Tenga en cuenta que esto incluirá todo lo que utilizó property()
directamente (que es lo que realmente hace un decorador), y que el orden de los nombres es arbitrario (ya que los diccionarios no tienen un orden establecido).
¿Es posible obtener una lista de todos los métodos decorados @property
en una clase? ¿Si es así, cómo?
Ejemplo:
class MyClass(object):
@property
def foo(self):
pass
@property
def bar(self):
pass
¿Cómo obtendría [''foo'', ''bar'']
de esta clase?