## descriptor
> Cuando una clase contiene tres método mágico ( `__get __, __ __ conjunto, __ delete__`) uno o todo el tiempo, entonces esta clase se llama clase descriptor
### papel
> Descriptor es el papel de un miembro de una clase llevó a cabo una gestión detallada las operaciones (adquisición, cesión, borrado)
> Descriptor es el agente de una clase de los miembros de operación, perteneciente al descriptor de la clase, el atributo de clase se define únicamente
### tres métodos mágicos
`` `Python
'''
__get __ (self, ejemplo, propietario)
mecanismo de activación: cuando la propiedad de miembro objeto de acceso se activa automáticamente (cuando el miembro ha sido entregado a la gestión descriptor)
Papel: establecer el valor actual de la propiedad adquirida
Parámetros 1 :. mismo descriptor de objeto 2 administrado por los miembros de la clase de objeto. 3. La administración es un miembro de la clase
Devuelve: el valor de los bienes adquiridos como miembro de
Advertencias: Ninguna
__set __ (self, ejemplo, valor)
mecanismo de activación: Al establecer la propiedad de miembro objeto se activa automáticamente (cuando el miembro ha sido entregado a la gestión descriptor)
Rol: Para gestionar la asignación de miembros
Parámetros 1 :. mismo descriptor de objeto 2 administrado por los miembros de la clase de objeto. 3. El valor de engaste
Valor de retorno: Ninguno
Advertencias: Ninguna
__delete __ (self, ejemplo)
mecanismo de activación: Cuando se elimina un objeto miembro de la propiedad se activa automáticamente (cuando el miembro ha sido entregado a la gestión descriptor)
Función: propiedades de miembro de borrado se gestionan
Parámetros 1 :. mismo descriptor de objeto 2 administrado por los miembros de la clase de objeto.
Valor de retorno: Ninguno
Advertencias: Ninguna
'''
`` `
descriptor de datos completa :( ###)
> Métodos mágicos tienen clase descriptor de datos es de tres
### descriptor no datos :( incompleta)
> No hay métodos mágicos tienen tres clases de descriptor de la clase no se
### Formato de uso básico
> La clase de atributo descriptor actual asignado a un miembro de una clase de agentes requiere
Ejemplo de código:
`` `Python
# Definir clase descriptor
clase PersonName ():
__name = 'abc'
def __get __ (self, ejemplo, dueño):
# Impresión (auto, ejemplo, propietario)
de retorno automático .__ nombre
def __set __ (self, ejemplo, valor):
# Impresión (auto, ejemplo, valor)
self .__ nombre = valor
def __delete __ (self, ejemplo):
# Impresión (auto, ejemplo)
# Nombre del self .__
imprimir ( 'no se pueden borrar')
# Definido en la categoría general
Clase Persona ():
# Para un miembro de una clase de descriptor de atributos de clase para ser alcanzado
# A valor del miembro de otra descripción de la clase del identificador de clase de objeto ()
# A continuación, cuando los miembros de esta clase tienen que operar, se entiende que la operación a otro objeto
name = PersonName ()
# Instancias de un objeto
zs = Persona ()
impresión (zs.name)
zs.name = 'John Doe'
impresión (zs.name)
del zs.name
impresión (zs.name)
`` `
Aplicación de descriptor analítico ###
`` `Python
# Definir una clase de los estudiantes, los estudiantes necesitan para registrar la identificación, nombre, puntuación
Estudiante de clase ():
def __init __ (self, identificación, nombre, puntuación):
self.id = id
self.name = nombre
self.score = puntuación
def returnMe (self):
info = f '''
Número de Estudiantes: {} self.id
Nombre del participante: {} self.name
Puntuación estudiante: {} self.score
'''
impresión (info)
'''
# Requisitos: Los estudiantes sólo pueden puntajes en el rango 0-100
solución:
1. Detectar una corriente en el rango de método anota __init__
# puntuaciones de detección varían
si la puntuación> = 0 y la puntuación <= 100:
self.score = puntuación
Esta solución sólo puede ser eficaz cuando se inicializa el objeto.
2. Define un método de detección de magia setattr
Si se detecta la asignación a los puntos de puntuación, la puntuación de determinación de detección
def __setattr __ (self, clave, valor):
# Detectar si la asignación es la puntuación
si la clave == 'puntuación':
# puntuaciones de detección varían
si el valor de> = 0 y el valor <= 100:
objeto .__ setattr __ (self, clave, valor)
más:
imprimir ( 'no cumple con la puntuación actual')
más:
objeto .__ setattr __ (self, clave, valor)
Si los estudiantes no puntuarán más que cómo hacer un tiempo, como las puntuaciones de lenguaje, las calificaciones de matemáticas, las puntuaciones en Inglés
El otro es el código actual es esta clase es más y más de ella?
3. Pensar puede utilizar descriptores para representar nuestra puntuación para esta propiedad
definiciones de clase descriptor 1. Marca
2. Los estudiantes en la clase puntuación a los miembros de la clase proxy descriptor
3. Siempre y cuando la asignación fraccional y el acceso al descriptor de la clase bien en las del mediador
'''
# Definir descriptor agente de administración puntuación de clase
Puntuación de clase ():
def __get __ (self, ejemplo, dueño):
de retorno automático .__ puntuación
def __set __ (self, ejemplo, valor):
si el valor de> = 0 y el valor <= 100:
self .__ puntuación = valor
más:
imprimir ( 'puntuación no cumple con los requisitos')
# puntuaciones de atributos de clase Uso descriptor puntuación Agente
Estudiante de clase ():
Puntuación = Puntuación ()
def __init __ (self, identificación, nombre, puntuación):
self.id = id
self.name = nombre
self.score = puntuación
def returnMe (self):
info = f '''
Número de Estudiantes: {} self.id
Nombre del participante: {} self.name
Puntuación estudiante: {} self.score
'''
impresión (info)
# Instancias de un objeto
zs = Student (1011, 'Zhang loco', 99)
zs.returnMe ()
zs.score = -20
zs.score = 88
zs.returnMe ()
`` `
Descriptor ### define tres formatos
`` `Python
# Formato recomendado se logra mediante la definición de un descriptor de la clase
'''
clase ScoreManage ():
def __get __ (self, ejemplo, dueño):
pasar
def __set __ (self, ejemplo, valor):
pasar
def __delete __ (self, ejemplo):
pasar
Estudiante de clase ():
puntuación = ScoreManage ()
'''
# Formato En segundo lugar, el uso de la función de propiedad para lograr
'''
Estudiante de clase ():
# Directamente definen necesitan ser administrados en esta clase unos tres métodos similares
def getScore (self):
imprimir ( 'getScore')
def setscore (self, valor):
imprimir ( 'setscore', valor)
def delscore (self):
imprimir ( 'delscore')
# Especificado en los tres métodos que corresponden a la función de la propiedad, un método correspondiente. __get __, 2. __set __, 3. __delete__
Puntuación = propiedad (getScore, setscore, delscore)
zs = Student ()
# Impresión (zs.score)
# = 200 zs.score
# Del zs.score
'''
# Formato usando la sintaxis de decorador de tres @property para lograr
'''
Estudiante de clase ():
__score = Ninguno
@propiedad
def anotar (auto):
imprimir ( 'get')
de retorno automático .__ puntuación
@ score.setter
def anotar (auto, valor):
imprimir ( 'set')
self .__ puntuación = valor
@ score.deleter
def anotar (auto):
imprimir ( 'eliminar')
del self .__ puntuación
zs = Student ()
# Impresión (zs.score)
zs.score = 199
impresión (zs.score)
del zs.score
'''
`` `
## patrones de diseño
> Modo de diseño es una característica o antes de la finalización de las necesidades humanas, basado en las experiencias y lecciones de los pasos y el código de diseño e implementación se resumen y se suman, se convierten en un requisito para alcanzar el modo clásico.
>
> Formato de código de patrón de diseño no es fijo, sino un diseño de la programación orientada a objetos
Ejemplo ### Individual (singlete) patrón de diseño
> En el script actual, la misma clase sólo puede crear un objeto de uso. Esta situación se vuelve Singleton (singlete).
`` `Python
'''
Caso único ejemplo, considere:
Singleton y relación de ley de matrimonio, especialmente en lo que una persona sólo puede tener un matrimonio
En la sociedad es cómo monógama completa?
Si quiere casarse, tiene que ir a la Oficina de Asuntos Civiles de registro
Oficina de Asuntos Civiles, dos personas necesitan para detectar cuenta de esto, para ver si el estado anterior del matrimonio
Si está casado, asegúrese de empuje hacia fuera.
Si usted no está casado, se puede construir un capítulo y comenzar el registro.
Pues bien, de acuerdo con esta línea de pensamiento sobre cómo lograr el patrón de diseño Singleton pitón en ella?
1. Usted necesita tener un camino a seguir para controlar el proceso de creación del objeto actual?
__new__ constructor
2. Hay una necesidad de almacenar y la etiqueta que indica si hay un objeto
Creación de una propiedad privada para el almacenamiento, el valor predeterminado Ninguno
3. En el proceso de creación de objetos para detectar y determinar si hay un objeto?
Si usted no se opone, crear un objeto, y el objeto se almacena, devolver el objeto
Si el almacenamiento es un objeto, devuelve el objeto directamente, no es necesario crear un nuevo objeto
'''
clase Demo ():
# 2 definen los objetos almacenados atributos particulares, el valor predeterminado Ninguno
__obj = Ninguno
1. Definiciones constructor #
def __new __ (CLS, * args, kwargs **):
# 3. En el proceso de creación de un objeto, si hay o no un objeto
si no cls .__ obj:
# Juez si no hay ningún objeto, el objeto se crea y almacena
cls .__ obj = objeto .__ nuevos __ (CLS)
# Devuelve directamente al almacenamiento de objetos
volver cls .__ obj
# Instancias de un objeto
a = Demo ()
b = Demo ()
impresión (a)
imprimir (b)
'''
<__ __ principal. Objeto de demostración en 0x106f4d850>
<__ __ principal. Objeto de demostración en 0x106f4d850>
'''
`` `
patrones de diseño mixto ### Mixin
clase #### Mixin
+ Mixin debe ser que representa una función, en lugar de un objeto.
+ Función Mixin debe ser sencillo, si hay múltiples funciones, sería la clase de Mixin más definido
+ Python en Mixin se logra a través de la herencia múltiple
+ Mixin esta clase normalmente no se utiliza solo, sino una mezcla de las otras clases, funciones para aumentar
+ Clase Mixin no depende de la subclase aplicación, incluso si el niño no hereda esta clase Mixin, una subclase se puede ejecutar correctamente, puede carecer de algunas características. .
#### beneficios del uso de la clase Mixin mixta?
El patrón de diseño 1. Mixin clase mixta, la clase no está en el contenido de la premisa modificado, amplía la funcionalidad de clase
2. Mixin tipo mixto con el fin de mejorar la reutilización de código, tal estructura de código simple, clara
puede necesitar ser ajustado de acuerdo con el desarrollo (la creación de una nueva clase mixta Mixin) para evitar la compleja herencia de diseño multi-nivel 3. función.
Ejemplo:
`` `Python
'''
Heredar la necesidad de un requisito previo necesario para la sucesión debe haber una relación entre el 'es-un' de
Por ejemplo:
Apple puede ir a heredar los frutos, ya que Apple es una fruta
Apple puede no hereda el almuerzo, el almuerzo porque no puede haber ninguna manzana
Tales vehículos como automóviles pueden ser heredados, debido a que el propio vehículo es un vehículo
¿Qué vehículos?
Coches, aviones, helicópteros, estos son los vehículos
Entonces, ¿cómo diseñar este tipo de relación que?
Por ejemplo, para crear una clase de vehículo y luego heredará todas pertenecen al vehículo, para ir a conseguir. . .
Sin embargo, los aviones y los helicópteros tienen la función de vuelo, y el coche no lo hicieron, a continuación, en un vehículo si el vuelo para definir esta función, no sería apropiado. .
Podría respectivamente, para lograr esta función no volar en aviones y helicópteros de la clase? Sí, pero no se puede reutilizar el código.
¿Cómo hacer?
Para definir una clase separada vehículos, aeronaves y las dos clases de padres, este avión y helicópteros pueden ir a heredar estas dos categorías.
'''
# Vehículo de transporte
vehículo de clase ():
# Transporte de mercancías
def Huo (self):
imprimir ( 'transporte de mercancías')
# Llevar pasajeros
def ren (self):
imprimir ( 'transporta pasajeros')
aviones #
clase FlyingMixin ():
def volar (auto):
imprimir ( 'puede despegar ...')
#define Automotive
carrito de clase (vehículo):
pasar
#define Aeronaves
avión clase (vehículo, FlyingMixin):
pasar
#define helicóptero
helicóptero de la clase (vehículo, FlyingMixin):
pasar
# En este momento para definir un avión que vuela de clases, por lo que el vehículo de vuelo, heredar directamente esta clase. Puede resolver este problema.
Pero # 1. Aparece clase herencia múltiple, al contrario de la 'is-a' 2. Este tipo de avión puede ser fácilmente malinterpretado
# Solución es utilizar la herencia múltiple, pero a las aeronaves de esta clase, que se define como una clase de Mixin de la mezcla,
En este punto, la aeronave es igual al # de esta clase, en función de la extensión para extender otras clases
'''
En el código anterior, aunque los helicópteros y aviones han utilizado herencia múltiple, que se hereda FlyingMixin
Sin embargo, debido a la adición de Minin este nombre de clase FlyingMixin, dijo el hombre detrás de la lectura del código, esta clase es una clase de Mixin
'''
`` `
### clases abstractas (a saber)
> Una clase abstracta es una clase especial:
> 1. La clase abstracta no puede ser utilizado, no se pueden crear instancias directamente se convierte en un objeto.
> 2. clase abstracta contiene método abstracto, el método no es un código de implementación del método abstracto.
> 3. La clase abstracta requiere subclases heredan, y anulan los métodos abstractos de la clase padre. Antes de que pueda utilizar.
`` `
clase abstracta, la aplicación general de las funciones y necesidades generales a planificarse en el diseño del programa, programación, algunos de los cuales son clara y debe ser completado,
Pero también puede haber cierta demanda no está claro, o no está seguro cómo alcanzar las necesidades específicas,
De manera que se puede poner la forma de lograr esta incertidumbre o el método detrás de la necesidad de ir a conseguir, definido como métodos abstractos (sólo define el nombre del método, no escribir código específico)
clase abstracta de las solicitudes:
Por ejemplo, para desarrollar un marco que tiene algunas características básicas y extensiones. . . .
Pero usted específicamente qué tipo de desarrollo de productos, marco de desarrollo con el marco de la gente no sabe o Aceptar.
Por lo tanto, el marco tendrá una función determinada, y se fue detrás de algunas de las formas es necesaria la definición de descanso para lograr su propia lógica de negocio específico en los métodos.
`` `
definición abstracta de clase:
`` `Python
abc importación
# Si desea definir una clase abstracta, las propiedades MetaClass de esta categoría deberán ser metaclase = abc.ABCMeta
clase WriteCode (metaclase = abc.ABCMeta):
# Requerido método abstracto, utilizando un decorador para decorar
@ abc.abstractmethod
def write_php (self):
pasar
write_java def (self):
print ( 'código para lograr el desarrollo de Java)
def write_python (self):
imprimir ( 'pitón alcanzar código de desarrollo')
# Clase abstracta no puede ser instanciada directamente objetos
# Obj = WriteCode ()
# Impresión (obj)
#TypeError: No se puede instanciar WriteCode clase abstracta con métodos abstractos write_php
# Definir subclases heredan la clase abstracta, y métodos abstractos de la clase abstracta
clase Demo (WriteCode):
def write_php (self):
print ( 'código para lograr el desarrollo php')
a = Demo ()
impresión (a)
a.write_java ()
a.write_php ()
a.write_python ()
`` `
El dominio método de aprendizaje, ya que se doblará para superar!
Aprender a simios: los logros de su propia simplemente una boutique!