2011-04-30 8 views

Respuesta

7

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.

+0

¡Gracias! Entonces, esencialmente, ¿puedes dividir las responsabilidades del descriptor de la clase que ejemplifica el descriptor? ¡Brillante! – mkelley33

+1

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

+0

@ möter * establece una cadena de algo que quieres cargar más tarde * Puedes hacer lo mismo usando '@ property', ¿no? –

0

@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().

+3

¿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

3

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.

Cuestiones relacionadas