Use @property en @property python

Referencia: Tutorial de Python de Liao Xuefeng , @property in python

El código específico es el siguiente:

# Siguiente realización es sólo para valor de atributo de entrada exterior decorativo está marcada, preservar su atributo modo de acceso 
de clase Student (Object):
     DEF  la __init__ (Self, nombre, Score): 
        la self.name = nombre 
        . Auto __Score = score 

    @property   # El método get toma el atributo score como método 
    def score (self):
         return self. __score 

    @ score.setter   # set method Dado que el score es una propiedad privada, debe haber un método set especial. Aquí la propiedad score se usa como método 
    def puntaje (auto, puntaje):
         si puntaje <0 o puntaje> 100 :
             elevar ValueError ( 'Puntuación inválida ' ) 
        Ser. __Score = Puntuación 


obj = Estudiantes ( ' Daniel ' , 99 ) 

Imprimir (obj.score) 

obj.score = -2   # no cumple será dada 

de impresión (obj.score)

Entonces la salida es:

D: \ Python \ venv \ Scripts \ python.exe D: / Python / PythonLearning / test / to_property.py 
Traceback (última llamada reciente): 
  Archivo " D: /Python/PythonLearning/test/to_property.py " , línea 22 , en <module> 
    obj.score = -2   # 不 符合 将会 报错 
  Archivo " D: /Python/PythonLearning/test/to_property.py " , línea 14, en el aumento de puntuación
     ValueError ( ' puntaje no válido ' ) 
ValueError: puntaje no válido 99 
Proceso terminado con el código de salida 1

Resumen: cuando vi por primera vez el contenido de esta sección, no lo entendí ~ Luego busqué información y pensé en ello cuidadosamente, probablemente lo entendí.

Debido a que algunos atributos requieren valores de entrada, como los puntajes de los estudiantes, si el puntaje es de 100 puntos, el rango razonable de puntajes es de 0 a 100, por lo que se debe verificar el puntaje de entrada. Así que pensé en convertir la puntuación en una propiedad privada del objeto Estudiante, y luego agregar los métodos set_score (), get_score () correspondientes para establecer y obtener la puntuación (porque la propiedad privada no se puede agregar u obtener directamente).

Sin embargo, al hacer esto, el código que establece u obtiene la puntuación cada vez debe escribirse (suponiendo que la instancia del objeto sea a) a.set_score () y a.get_score () (aquí solo se dice que después de convertir la puntuación en una propiedad privada, debe haber una configuración ¡Y dos métodos para obtener puntaje, y estos dos métodos no deben ser lo mismo que puntaje! De lo contrario, habrá ambigüedad).

Este formulario es muy "engorroso" y pensó que Python puede asignar un nombre de método a una variable, por lo que hay un método decorador del formulario anterior. ¡Esto hace posible verificar el valor de la propiedad al tiempo que garantiza la forma de acceso conveniente original!

Sin embargo, al final quiero burlarme. De hecho, creo que usar a.set_score () y a.get_score () para acceder al puntaje no es tan "engorroso", ¿verdad? ? ? La forma de obtener un decorador es realmente fácil de hacer que los atributos y métodos sean indistinguibles ~~~

Supongo que te gusta

Origin www.cnblogs.com/heyour/p/12753703.html
Recomendado
Clasificación