Soy consciente de que una propiedad es un descriptor, pero ¿hay ejemplos específicos de cuando usar una clase de descriptor podría ser más ventajoso, pitónico, o proporcionar algún beneficio sobre el uso de @property
en una función de método?¿Cuándo y por qué podría asignar una instancia de una clase de descriptor a un atributo de clase en Python en lugar de usar una propiedad?
Respuesta
Mejor encapsulación y reutilización: una clase de descriptor puede tener atributos personalizados establecidos en la creación de instancias. A veces es útil mantener los datos confinados de esta manera, en lugar de tener que preocuparse de que se configuren o sobrescriban en el propietario del descriptor.
¡Gracias! Entonces, esencialmente, ¿puedes dividir las responsabilidades del descriptor de la clase que ejemplifica el descriptor? ¡Brillante! – mkelley33
Las posibilidades son literalmente infinitas;) Piensa cosas como la carga diferida: establece una cadena de algo que quieras cargar más adelante cuando accedas por primera vez al descriptor y nunca más tengas que preocuparte por eso. O elimine el desorden de la clase propietaria y colóquelo donde corresponde lógicamente. – XORcist
@ möter * establece una cadena de algo que quieres cargar más tarde * Puedes hacer lo mismo usando '@ property', ¿no? –
@property no le permite definir métodos dedicados de setter y getter al mismo tiempo. Si un método getter es "lo suficientemente bueno", entonces use @property; de lo contrario, necesitará property().
¿Por qué preferiría la propiedad a algo como '' @ my_method_name.setter''? Además, ¿cómo se aplica esto al concepto de una clase descriptiva personalizada? – mkelley33
Permítanme citar el gran video EuroPython 2012 "Discovering Descriptors":
Cómo elegir entre descriptores y propiedades:
- Propiedades funcionan mejor cuando saben acerca de la clase
- descriptores son más generales, a menudo se puede aplicar a cualquier clase
- Use descriptores si el comportamiento es diferente para las clases y las instancias
- Propert ies son azúcar sintáctico
Además, tenga en cuenta que puede usar __slots__
con los Descriptores.
- 1. ¿Cuándo debería usar una estructura en lugar de una clase?
- 2. ¿Cuándo debería usar un campo en lugar de una propiedad?
- 3. ¿Crear descriptor de propiedad por instancia?
- 4. ¿Por qué usar la propiedad en una clase?
- 5. Cuándo usar un módulo y cuándo usar una clase
- 6. ¿Por qué declarar una clase de descriptor en la función __init__ rompe la funcionalidad del descriptor?
- 7. Creando una clase de Python para "solo una instancia"?
- 8. Crear una instancia de una clase python en C#
- 9. Cuándo utilizar el puntero a una clase y cuándo simplemente crear una instancia como una variable
- 10. Asignación al atributo __class__ de una instancia en Python
- 11. cómo crear dinámicamente una instancia de una clase en python?
- 12. ¿Por qué debería usar una variable privada en un descriptor de acceso a la propiedad?
- 13. Cómo y cuándo usar una clase abstracta
- 14. En Python, ¿cuándo debería usar una clase meta?
- 15. ¿Cómo asigno una propiedad a una instancia en Python?
- 16. ¿Cómo ordenar una matriz que contiene objetos de clase por un valor de propiedad de una instancia de clase?
- 17. ¿Cuándo y por qué debería usar una ruta de acceso nombrada en lugar de un diccionario?
- 18. ¿Hay alguna manera de decirle explícitamente a PyCharm qué clase es un atributo de una instancia?
- 19. ¿Cuáles son los beneficios de usar una clase parcial en lugar de una clase abstracta?
- 20. Python: eliminar un atributo de clase en una subclase
- 21. C#: probar si una clase en una instancia de una súper clase en lugar de una subclase
- 22. Python: ¿Por qué no puedo usar `super` en una clase?
- 23. Agregando una variable de instancia a una clase en Ruby
- 24. Métodos de burla en cualquier instancia de una clase python
- 25. Creación de una instancia de una clase anidada en XAML
- 26. ¿Por qué usar una clase abstracta vacía en lugar de una interfaz?
- 27. atributo de clase python
- 28. Cuándo usar una clase en VBA?
- 29. ¿Puedo definir un __repr__ para una clase en lugar de una instancia?
- 30. declarar una instancia de una clase const
¿Por qué una propiedad es un descriptor? – Tim