class Quick_Tasks():
def __init__(self,name=None):
self.name = name
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
if type(value).__name__ == "int":
self.__value = 8
else:
print("nel")
obj = Quick_Tasks("Arroz")
print("")
print(obj.name)
obj.name = 45
print(obj.name)
Me genera advertencias en la línea 8
__name no se puede resolver, yo he llevado python básico en Instituto pero no recuerdo haber visto los @property ... lo he busca en la documentación de Python en todas lo que tenía que ver con Class pero como siempre no encontré nada relacionado, sin embargo si que hay información bajo
property (build-in class), pues es imposible llegar a esta parte de la documentación a partir de Class (pésima documentación XD)
No sé si se trate de propiedades internas ocultas en lo más profundo de la documentación, pero a simple vista me parece que están mal, al menos a ejecutar un
dir(obj) no me muestra las propiedades
__name ni
__value:
dir(ob)
['__doc__', '__init__', '__module__', 'name']
- Para mí lo correcto sería:
class Quick_Tasks(object):
def __init__(self, name=None):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, value):
if type(value).__name__ == "int":
self._name = 8
else:
print("nel")
obj = Quick_Tasks("Arroz")
print("----")
print(obj.name)
obj.name = 45
print(obj.name)
Devolviendo:Arroz
8
-- Es algo raro darle intentar Setearle un 45 y en su lugar ponerle un 8, pero el ejemplo es ese XD. Al menos eso es lo que más o menos entiendo que se desea hacer...
En caso de tu Código, estás dándole directamente un valor al Inicializar tu Clase, no estás usando tu Setter, en su lugar podrías llamar al Setter, pero tienes que hacer más legible tu código para evitarse problemas de mal-entendido con los nombres:
class TreeNode(object):
def __init__(self, value=None):
self.value = value
@property
def value(self):
return self._value
@value.setter
def value(self, value):
if type(value).__name__ == "int":
self._value = 8
else:
print("nel")
def main():
tree_node = TreeNode(3)
print(tree_node.value)
tree_node.value = 5
print(tree_node.value)
tree_node.value = "cervatillo"
print(tree_node.value)
if __name__ == '__main__':
print("---")
main()
Devuelve:---
8
8
nel
8
- Me reservo los
__variable__ y
__variable para las variables, propiedades y métodos propios del lenguaje o que sean muy especiales. Además hago una distinción clara de nombres, uso
_variable para variables, propiedades o métodos de uso interno, y
variable para uso externo