privados poo otra metodos metodo magicos llamar herencia ejemplos clases clase atributos python properties decorator python-decorators

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?