la línea pitón 028 (paquete)

1 introducción

  La programación orientada a objetos tiene tres características: encapsulación, herencia, polimorfismo, la característica más importante es el paquete. El paquete se refiere a los datos y las funciones están integradas entre sí, no suena muy familiar,

Sí, hemos dicho antes "integrado", la palabra es en realidad un paquete de argumento popular. Además, para el paquete a un objeto o clase atributos, podemos controlar estrictamente el acceso a ellos, en dos pasos reales

Ahora: oculto e interfaces abiertas.

2 atributo oculto

  mecanismo de Python adoptó a principios de los atributos de clase de manera doble subrayado ocultos (establecido en privado), pero en realidad esto es sólo una variación de la operación, las propiedades de todas las clases que comienzan con líneas dobles cayeron

En la fase de definición de clase se convertirá automáticamente en una forma de "nombre de clase _ __ nombre de atributo", la sintaxis de detección:

. 1  clase Foo:
 2      X = 1.
 3.      __N = 10   # deformada _Foo__N 
4.  
5.      DEF  la __init__ (Self):   # definir una función, la función detectará sintaxis, así también con __ modificación atributo 
. 6          . Auto __X = 10   # self._Foo__x deformado 
. 7  
. 8      DEF  __f1 (Self):   # deforma _Foo__f1 
9.          Imprimir ( ' RUN __f1 ' )
 10  
11.      DEF F2 (Self):   # definir una función, la sintaxis de función detecta el comienzo de la tan __ la propiedad también se deforma 
12          Ser.__f1 ()   # deformada self._Foo__f1 () 
13 es  
14  
15  Imprimir (Foo. la __dict__ )

   Este problemas de deformación que la atención necesidad son:

  1) no puede acceder al comienzo de la decadencia de dos líneas está directamente fuera del atributo de clase, pero conocer los nombres de las clases y atributos que puede deletrear el nombre: nombre de la clase _ __ propiedad, entonces usted puede visitar, como Foo._Foo__N, por lo que este no hay límite de acceso externo y operar sobre el terreno en el sentido estricto, sólo una deformación del significado gramatical.

imprimir (Foo._Foo__N)
 de impresión (Foo._Foo__f1)
 >>> 10 
>>> <función Foo. __f1 en 0x00000288C4DCCE18>

  2) dentro del atributo de clase es líneas directamente accesibles dobles que comienzan a disminuir, como self .__ f1 (), ya que una deformación uniforme en la definición de clase en el principio de la doble tipo de fase interna propiedades de línea declive. 

obj = Foo () 
obj.f2 ()
 >>> __f1 plazo

   3) una vez que la asignación después de la definición de clase de la deformación clase sólo se producen durante la fase de definición, no se deforma.

obj = Foo () 
obj. __S = 30
 de impresión (. obj __dict__ )
 >>> { ' _Foo__x ' : 10, ' __S ' : 30}

3 Interfaz Abierto

  Las propiedades personalizadas es utilizar, no es un propósito oculto.

  1) La ocultación de datos restringe directamente la operación externa tipo en los datos, a continuación, la interfaz debe proporcionar clase permitida datos de operación externos indirectos, la interfaz puede estar unido en la lógica adicional para realizar operaciones en los datos a estrictamente control

# Diseñador: Egon 
clase Personas:
     DEF  __init__ (self, nombre): 
        Ser. __Name__ = nombre 

    DEF get_name (Ser):
         # puede indirectamente el acceso al nombre de la propiedad a través de la interfaz 
        # impresión ( 'basura pequeña, para no ver' ) 
        Imprimir (Ser. __name__ ) 

    DEF nombre_conjunto (Ser, Val):
         SI del tipo (Val) ES  no str:
             Imprimir ( ' pequeña basura, debe pasar a un tipo de cadena ' )
             de retorno 
        Ser. __name__ = Val 

# usuarios: Wang Peng
Personas = obj ( ' Egon ' )
 # impresión (obj.name) # no puede directamente el nombre del atributo 
# obj.get_name () 
# obj.set_name ( 'EGON') 
# obj.set_name (123123123)

  2) atribuye Ocultar función

  Propósito es aislar la complejidad.

 

Supongo que te gusta

Origin www.cnblogs.com/mmmmmrz/p/12660355.html
Recomendado
Clasificación