Python orientado a objetos de programación (clase y ejemplo, la encapsulación de datos, herencia, polimorfismo, tipo (), isinstance ()) - 5

Una clase y la instancia

1. La definición de los problemas relacionados con la propiedad

  • Los nombres de clase suelen ser capitalizados
  • La forma se define como class Student(object):, Estudiante detrás de los soportes indicar qué herencia de clases, si no es adecuado para utilizar el objeto.
  • Algunos creen que debe unirse atributos de clase, mediante la definición de un __init__método, el primer parámetro del método es siempre uno mismo, ya que el mismo es el punto de crear instancias de sí mismo.
  • Con el __init__método, cree una instancia en el tiempo, no se puede pasar un parámetro nulo, debe pasar el __init__método de ajuste de parámetros, pero no es necesario para pasar uno mismo, intérprete de Python mismo pasará en una variable de instancia.
  • Y en comparación con la función normal, sólo un poco diferente en función definida en la clase, es el primer argumento es siempre una variable de instancia self, y cuando se llama, no pasa este parámetro.

2. Paquete de Datos

  • Al acceder a la clase definida dentro de la función característica de la clase, encapsulado de datos.
  • Un método es una instancia de función está obligado, diferente de la función normal, el método puede acceder directamente a la instancia de datos.
  • Y idiomas diferentes estáticas, Python permite que cualquier enlace de datos variables, por ejemplo, es decir, por dos variables de instancia, aunque son diferentes instancias de la misma clase, pero los nombres de las variables que pueden ser diferentes.

En segundo lugar, limitar el acceso

  1. Si desea tener acceso externo dentro de la propiedad no debe ser puesto antes de que el nombre de la propiedad y dos guiones bajos __, en Python, los nombres de las variables ejemplo, si el __principio, se convierte en una variable privada (privada), sólo se puede acceder al interior , el acceso no externa.
  2. Si desea acceder a código externo, se puede aumentar a clase del estudiante get_namey get_scoremétodo para el acceso externo.
  3. Si tiene que modificar la puntuación, puede aumentar set_namemétodo.
  4. A veces, se verá una instancia nombres de las variables comienzan con un guión, por ejemplo _name, una variable de instancia tales nombres están disponibles, pero de acuerdo con las disposiciones son tratados como variables privadas.
  5. Comenzando con un doble subrayado variables de instancia no son necesariamente no son accesibles desde fuera de ella? De hecho, no. Puede no directamente el acceso __namedebido a que el intérprete de Python fuera de la __namevariable de cambiar _Student__name, por lo que, aún puede _Student__nameacceder a la __namevariable de
  6. Sin embargo, se recomienda encarecidamente que no lo hacen, debido a diferentes versiones del intérprete de Python pueden poner en un __name diferentes nombres de variables. En general, es, Python no tiene ningún mecanismo para dejar de hacer cosas malas, todo gracias a la conciencia.
class Student(object):
    def __init__(self, name, gender):
        self.__name = name
        self.__gender = gender
    
    def get_name(self):
        return self.__name

    def get_gender(self):
        return self.__gender

    def set_gender(self, gender):
        self.__gender = gender


bart = Student('Bart', 'male')
if bart.get_gender() != 'male':
    print('测试失败!')
else:
    bart.set_gender('female')
    if bart.get_gender() != 'female':
        print('测试失败!')
    else:
        print('测试成功!')    

En tercer lugar, herencia y polimorfismo

  1. Heredado la mayor ventaja es que, para la sub-categoría, el acceso a todas las funciones de la clase padre.
  2. Por supuesto, también puede aumentar los métodos de la subclase, como la clase de perro.
  3. Cuando la clase padre y la subclase están presentes en la misma forma para los métodos subclases sustitución de la clase padre, se ejecuta el código, siempre hay una subclase llamadas de método, para que podamos obtener el beneficio de otra herencia:多态
  4. Así, en la jerarquía, si el tipo de datos es una instancia de una subclase del tipo de datos que también puede ser visto como un padre. Sin embargo, lo contrario no funcionará
  5. beneficios multi-estado, la persona que llama sólo llama, independientemente de los detalles, este es el famoso 开闭原则: abierto de la extensión: permitir la nueva subclase de animales; cerrado por modificación: Animal no depende necesidad de cambiar el tipo de run_twice () y otras funciones.
  6. Estática vs lenguaje lenguajes dinámicos para las lenguas tipos estáticos (como Java), si la necesidad de pasar Tipo de animal, el objeto entrante debe ser de tipo animal o de sus subclases, de lo contrario, no se puede llamar al método run (); para Python un lenguaje dinámico, que no necesariamente tienen que pasar en el tipo de animal. Sólo tenemos que garantizar ese objeto entrante tiene un método run () en él.

En cuarto lugar, obtener la información de los objetos

  1. Uso type()función se puede utilizar para determinar el tipo del objeto. Clase devuelve el tipo correspondiente.
  2. Para determinar si un objeto es una función, puede utilizar typeslas constantes definidas en el módulo
  3. Utilice isinstance()Analizando el tipo de clase. Y también determina si es o no una variable de un tipo determinado,isinstance([1, 2, 3], (list, tuple)
  4. Para obtener las propiedades y métodos de un objeto, puede utilizar dir()la función. Con getattr(),, setattr(), hasattr()podemos operar directamente el estado de un objeto.
>>> class MyObject(object):
...     def __init__(self):  
...         self.x = 9
...     def power(self):
...         return self.x * self.x
... 
>>> obj = MyObject()
>>> hasattr(obj, 'x')
True
>>> obj.x
9
>>> hasattr(obj, 'y')
False
>>> setattr(obj, 'y', 19)
>>> hasattr(obj, 'y')
True
>>> getattr(obj, 'y')
19
>>> obj.y
19
>>> getattr(obj, 'z')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'MyObject' object has no attribute 'z'
>>> getattr(obj, 'z', 404)
404
>>> hasattr(obj, 'power')
True
>>> getattr(obj, 'power')
<bound method MyObject.power of <__main__.MyObject object at 0x00000224FC11FF60>>
>>> fn = getattr(obj, 'power') 
>>> fn
<bound method MyObject.power of <__main__.MyObject object at 0x00000224FC11FF60>>
>>> fn()
81

atributos de instancia y los atributos de clase V.

  1. Ejemplos de un método de propiedad de unión es variable a modo de ejemplo o por selfvariable.
  2. Si la Studentclase en sí necesita unirse una propiedad puede definir atributos directamente en la clase, esta propiedad es el atributo de clase, en la final de Studentla clase para todos.
  3. En la preparación de los procedimientos, no hacer por atributos de instancia y los atributos de clase con el mismo nombre, debido a que la propiedad de instancia del mismo nombre protegerá el atributo de clase, pero cuando se elimina el atributo de instancia, y luego utilizar el mismo nombre, el acceso a la será el atributo de clase

Supongo que te gusta

Origin www.cnblogs.com/tsruixi/p/12595147.html
Recomendado
Clasificación