Usar get / set parece ser una práctica común en Java (por varias razones), pero casi no veo código Python que use esto.
¿Por qué usa o evita los métodos get / set en Python?
python
getter-setter
Roger Pate
fuente
fuente
Respuestas:
Enlace genial: Python no es Java :)
fuente
En Python, puede acceder al atributo directamente porque es público:
class MyClass: def __init__(self): self.my_attribute = 0 my_object = MyClass() my_object.my_attribute = 1 # etc.
Si desea hacer algo sobre el acceso o la mutación del atributo, puede usar las propiedades :
class MyClass: def __init__(self): self._my_attribute = 0 @property def my_attribute(self): # Do something if you want return self._my_attribute @my_attribute.setter def my_attribute(self, value): # Do something if you want self._my_attribute = value
Fundamentalmente, el código del cliente sigue siendo el mismo.
fuente
Esto es lo que dice Guido van Rossum sobre eso en Masterminds of Programming
fuente
No, no es pitónico. La forma generalmente aceptada es usar atributos de datos normales y reemplazar los que necesitan una lógica get / set más compleja con propiedades.
fuente
La respuesta corta a su pregunta es no, debe usar propiedades cuando sea necesario. Ryan Tamyoko proporciona la respuesta larga en su artículo Getters / Setters / Fuxors
fuente
Tu observación es correcta. Este no es un estilo normal de programación en Python. Los atributos son todos públicos, por lo que simplemente acceda (obtenga, establezca, elimine) como lo haría con los atributos de cualquier objeto que los tenga (no solo clases o instancias). Es fácil saber cuándo los programadores de Java aprenden Python porque su código Python se parece a Java usando la sintaxis de Python.
Definitivamente estoy de acuerdo con todos los carteles anteriores, especialmente el enlace de @ Maximiliano al famoso artículo de Phillip y la sugerencia de @ Max de que cualquier cosa más compleja que la forma estándar de configurar (y obtener) atributos de clase e instancia es usar Propiedades (o Descriptores para generalizar aún más) para personalizar la obtención y configuración de atributos. (Esto incluye poder agregar sus propias versiones personalizadas de privado, protegido, amigo o cualquier política que desee si desea algo que no sea público).
Como demostración interesante, en Core Python Programming (capítulo 13, sección 13.16), se me ocurrió un ejemplo de cómo usar descriptores para almacenar atributos en el disco en lugar de en la memoria. Sí, es una forma rara de almacenamiento persistente, pero hace que muestran un ejemplo de lo que es posible!
Aquí hay otra publicación relacionada que también puede resultarle útil: Python: múltiples propiedades, un setter / getter
fuente
Había venido aquí por esa respuesta (lamentablemente no pude). Pero encontré un trabajo en otro lugar. Este código a continuación podría ser una alternativa para get .
class get_var_lis: def __init__(self): pass def __call__(self): return [2,3,4] def __iter__(self): return iter([2,3,4]) some_other_var = get_var_lis
Esto es solo una solución . Al usar el concepto anterior, también podría construir fácilmente la metodología get / set en py.
fuente
Nuestro profesor mostró un ejemplo en clase que explica cuándo debemos usar las funciones de acceso.
class Woman(Human): def getAge(self): if self.age > 30: return super().getAge() - 10 else: return super().getAge()
fuente