Meta tags:
description= Aprende el decorador @property de Python: crea getters, setters, deleters y atributos calculados con sintaxis limpia y control total de validación.;
Headings (most frequently used words):
un, propiedades, de, las, setter, property, getter, agregar, propiedad, el, python, getters, setters, por, qué, existen, básico, acceso, solo, lectura, con, validación, calculadas, deleter, actualizar, atributo, simple, una, la, función, integrada, cómo, funcionan, breve, vistazo, los, descriptores, errores, comunes, referencia, rápida, práctica, ejemplo, real, calculada, recursión, infinita, olvidar, guión, bajo, definido, antes, que, __init__, llama, al, automáticamente, son, nivel, clase, no, instancia,
Text of the page (most frequently used words):
self (92), python (70), #property (52), #setter (47), celsius (45), def (43), value (41), radius (35), con (25), una (24), que (24), copiar (21), print (21), age (20), the (17), class (17), return (17), atributo (16), temperature (16), aprender (15), las (15), _celsius (15), los (14), valueerror (14), __init__ (14), side (14), matplotlib (14), propiedades (13), mysql (13), propiedad (12), deleter (12), getter (12), mongodb (12), para (11), función (11), agregar (11), métodos (11), raise (11), decorador (11), elementos (11), por (9), attribute (9), clase (9), valor (9), width (9), validación (8), you (8), del (8), como (8), square (8), listas (8), html (7), simple (7), solo (7), lectura (7), must (7), obj (7), define (7), sin (7), negative (7), cuando (7), _age (7), 100 (7), datos (7), tuplas (7), práctica (6), acceso (6), this (6), sintaxis (6), circle (6), person (6), height (6), fahrenheit (6), crear (6), eliminar (6), w3docs (5), integrada (5), attributeerror (5), for (5), método (5), son (5), _radius (5), objeto (5), más (5), código (5), area (5), _height (5), _width (5), archivos (5), string (5), strings (5), primeros (5), pasos (5), tutorial (5), variables (5), lista (5), formatter (5), color (5), json (4), generator (4), funcionan (4), descriptores (4), actualizar (4), calculadas (4), qué (4), existen (4), classmethod (4), they (4), what (4), happens (4), that (4), has (4), subyacente (4), hay (4), none (4), fdel (4), fset (4), fget (4), name (4), puedes (4), instancia (4), consulta (4), cannot (4), llama (4), esto (4), nombre (4), calls (4), leer (4), ver (4), cambiar (4), getters (4), setters (4), below (4), absolute (4), zero (4), 273 (4), regresión (4), diccionarios (4), acceder (4), code (3), encoder (3), editor (3), cuestionarios (3), ejercicios (3), php (3), javascript (3), css (3), referencia (3), errores (3), comunes (3), cómo (3), breve (3), vistazo (3), mágicos (3), comprobar (3), and (3), write (3), only (3), plain (3), public (3), decorator (3), classname (3), prop (3), attr (3), ser (3), hace (3), atributos (3), validation (3), debe (3), antes (3), private (3), respaldo (3), bajo (3), error (3), mismo (3), descriptor (3), mientras (3), mecanismo (3), funciones (3), __get__ (3), _side (3), non (3), forma (3), existente (3), llamadores (3), deleters (3), positive (3), escribir (3), control (3), clases (3), cadenas (3), recorrer (3), unir (3), tools (3), italiano (2), português (2), español (2), français (2), русский (2), deutsch (2), english (2), beautifier (2), diff (2), password (2), herramientas (2), try (2), java (2), git (2), libros (2), fragmentos (2), rápida (2), básico (2), page (2), static (2), instance (2), because (2), now (2), unchanged (2), have (2), add (2), existing (2), callers (2), raises (2), when (2), assign (2), defined (2), which (2), use (2), named (2), doc (2), activa (2), este (2), pasa (2), hasta (2), necesitas (2), usa (2), dataclasses (2), escribes (2), momento (2), construcción (2), pero (2), gestionar (2), siempre (2), _value (2), almacena (2), guión (2), recursionerror (2), again (2), recursión (2), devuelve (2), staticmethod (2), function (2), lugar (2), directamente (2), limpia (2), estándar (2), cadena (2), documentación (2), líneas (2), years (2), puede (2), _get_age (2), _set_age (2), _del_age (2), integer (2), int (2), isinstance (2), not (2), style (2), dos (2), math (2), version (2), modificar (2), nothing (2), stops (2), vez (2), explícitamente (2), elimina (2), menos (2), object (2), deleting (2), llamador (2), property_name (2), perimeter (2), rectangle (2), computed (2), real (2), intentar (2), genera (2), tiene (2), variable (2), lee (2), otros (2), clave (2), mantienes (2), temperatura (2), set_celsius (2), objetos (2), normal (2), total (2), sobre (2), handling (2), números (2), limit (2), colección (2), delete (2), ordenar (2), base (2), cuadrícula (2), dispersión (2), distribución (2), introducción (2), bucles (2), conjuntos (2), set (2), sets (2), hash (2), 2026, todos, derechos, reservados, hecho, desarrolladores, idioma, política, privacidad, contacto, acerca, empresa, tutoriales, ejemplos, gratuitos, web, desde, 2014, next, previous, yes, was, helpful, updated, call, set_radius, instead, bypass, directly, dict, read, continue, work, called, transparently, typeerror, stores, regular, bypassing, silently, ignores, assignment, there, set_age, equivalente, legible, escribible, agrega, sola, harías, regulares, definen, aplican, todas, instancias, personalización, enfoque, basado, __slots__, nivel, triggers, applies, here, too, dentro, existe, generalmente, deseas, también, ejecuta, significa, asignación, inicial, correctamente, automáticamente, existir, primero, cuerpo, definido, writes, reads, good, convención, prefijo, diferente, bad, muy, común, usar, infinita, olvidar, eso, accedido, entero, protocolo, utilizan, exploración, profunda, type, inspeccionando, internamente, busca, comprueba, así, devolver, __delete__, __set__, recomendación, llamada, explícita, útil, quieres, pasar, bloque, varias, otro, __doc__, acepta, cuatro, argumentos, cualquiera, ellos, explicit, recommended, azúcar, sintáctico, estas, definiciones, equivalentes, cualquier, lea, escriba, seguirá, funcionando, modificaciones, 5398, import, with, interface, adelante, agregarla, works, but, uno, mayores, beneficios, prácticos, conoce, veces, principio, uniforme, comenzar, público, después, garantiza, eliminado, pueda, volver, leerse, reasignarlo, liberan, recursos, vinculados, caché, forzar, recálculo, próximo, usan, frecuencia, útiles, permite, ejecutar, ejemplo, calculada, naturaleza, añadas, 212, deriva, cada, corresponder, almacenado, partir, calcular, tiempo, regla, ambos, casos, vincula, nuevo, deben, compartir, 300, ahora, tanto, escritura, decora, segundo, escrituras, esta, correcta, modelar, establecerse, través, específicos, asignarle, parentheses, automatically, parezca, store, uso, respaldado, privada, resuelve, elegante, añades, capa, detrás, escena, problema, nada, impide, establezcan, debajo, cero, absoluto, podrías, entonces, tendrían, cambio, api, rompe, compatibilidad, physically, impossible, 5000, considera, implementación, ingenua, expone, interno, asegúrate, estar, familiarizado, herramienta, estáticos, encapsulación, capó, romper, derivadas, cuándo, usarlas, capítulo, cubre, integrado, convertir, gestionado, lenguajes, aspecto, ocurre, ese, escribe, set_x, get_x, aprende, crea, calculados, peticiones, http, pytest, paquetes, entornos, virtuales, tooling, best, practices, threading, asyncio, concurrency, csv, random, sys, itertools, collections, lanzar, excepciones, standard, library, sumar, invertir, duplicados, how, enumeraciones, abstractas, encapsulamiento, polimorfismo, advanced, oop, sentencia, match, enumerate, zip, map, comprensiones, gestores, contexto, closures, generadores, decoradores, args, kwargs, sugerencias, tipo, intermediate, actualización, find, insertar, join, update, drop, table, order, where, select, insert, tabla, vecinos, cercanos, curva, auc, roc, cruzada, agregación, bootstrap, means, categóricos, búsqueda, logística, agrupamiento, jerárquico, matriz, confusión, árbol, decisión, train, test, escalar, múltiple, polinomial, lineal, diagrama, percentil, desviación, media, mediana, moda, machine, learning, gráficos, pastel, histogramas, barras, subplot, etiquetas, marcadores, trazado, pyplot, django, scipy, pandas, numpy, modules, manejo, file, formateo, entrada, usuario, except, pip, regex, matemáticas, fechas, módulos, ámbito, iteradores, herencia, arrays, lambda, while, else, operadores, booleanos, casting, tipos, comentarios, nombres, desempaquetar, tupla, segmentación, home, salida, anidados, iterar, comprensión, globales, formato, caracteres, escape, diccionario, concatenar, asignar, múltiples, valores, conjunto, añadir, iniciar, sesión, buscar, formatters, url, reverse, sha256, md5, length, calculator, colors, hsl, hex, mixer, converter, picker, general, cursos,
Text of the page (random words):
s de conjuntos segmentación de cadenas ordenar listas métodos de string métodos de tupla desempaquetar tuplas actualizar tuplas nombres de variables introducción a python primeros pasos con python sintaxis de python comentarios en python variables en python tipos de datos en python números en python casting en python strings de python booleanos en python operadores de python listas de python tuplas de python diccionarios en python python if else bucles while en python bucles for en python funciones en python python lambda arrays en python clases y objetos en python herencia en python iteradores de python ámbito en python módulos de python fechas en python matemáticas en python python json python regex python pip python try except entrada de usuario en python formateo de cadenas en python file handling manejo de archivos en python leer archivos en python escribir crear archivos en python eliminar archivos en python python modules tutorial de numpy tutorial de pandas tutorial de scipy tutorial de django python matplotlib introducción a matplotlib primeros pasos con matplotlib matplotlib pyplot trazado con matplotlib marcadores de matplotlib líneas en matplotlib etiquetas en matplotlib cuadrícula de matplotlib subplot de matplotlib dispersión en matplotlib barras en matplotlib histogramas con matplotlib gráficos de pastel con matplotlib machine learning primeros pasos media mediana moda desviación estándar percentil distribución de datos distribución normal de datos diagrama de dispersión regresión lineal regresión polinomial regresión múltiple escalar train test árbol de decisión matriz de confusión agrupamiento jerárquico regresión logística búsqueda en cuadrícula datos categóricos k means agregación bootstrap validación cruzada curva auc roc k vecinos más cercanos python mysql primeros pasos con mysql mysql crear base de datos mysql crear tabla mysql insert mysql select mysql where mysql order by mysql delete mysql drop table mysql update mysql limit mysql join python mongodb primeros pasos con mongodb crear base de datos mongodb mongodb crear colección insertar en mongodb mongodb find consulta mongodb ordenar en mongodb mongodb delete eliminar colección en mongodb actualización en mongodb mongodb limit intermediate python f strings sugerencias de tipo args kwargs decoradores generadores closures recursión gestores de contexto comprensiones enumerate zip map sentencia match advanced oop métodos mágicos property static y classmethod dataclasses polimorfismo encapsulamiento clases abstractas enumeraciones python how to eliminar duplicados en listas invertir un string sumar dos números error handling and the standard library lanzar excepciones collections itertools os sys random archivos csv concurrency in python asyncio threading python tooling and best practices entornos virtuales paquetes pytest peticiones http python property getters y setters aprende el decorador property de python crea getters setters deleters y atributos calculados con sintaxis limpia y control total de validación el decorador property es el mecanismo integrado de python para convertir un método en un atributo gestionado en lugar de escribir métodos get_x y set_x como en otros lenguajes escribes un acceso a atributo de aspecto normal obj x mientras mantienes control total sobre lo que ocurre cuando ese atributo se lee se escribe o se elimina este capítulo cubre por qué existen las propiedades y cuándo usarlas crear una propiedad de solo lectura con property agregar un setter con name setter agregar un deleter con name deleter propiedades calculadas derivadas actualizar un atributo simple a una propiedad sin romper el código existente la función integrada property el mecanismo subyacente del decorador cómo funcionan las propiedades como descriptores un breve vistazo bajo el capó errores comunes antes de leer asegúrate de estar familiarizado con las clases y objetos de python las propiedades son una herramienta clave para la encapsulación en python para métodos de clase y estáticos consulta staticmethod y classmethod por qué existen las propiedades considera una clase que almacena una temperatura en celsius una implementación ingenua expone el valor interno directamente class temperature def __init__ self celsius self celsius celsius t temperature 25 t celsius 5000 nothing stops this physically impossible copiar el problema nada impide que los llamadores establezcan una temperatura por debajo del cero absoluto 273 15 c podrías agregar un método set_celsius con validación pero entonces los llamadores tendrían que cambiar su código de t celsius 100 a t set_celsius 100 un cambio de api que rompe la compatibilidad property resuelve esto de forma elegante mantienes la sintaxis t celsius 100 mientras añades una capa de control detrás de escena getter básico acceso de solo lectura el uso más simple de property es un atributo de solo lectura respaldado por una variable privada class temperature def __init__ self celsius self _celsius celsius store in a private attribute property def celsius self return self _celsius copiar el decorador property hace que celsius parezca un atributo simple para el llamador t temperature 25 print t celsius 25 no parentheses python calls the getter automatically copiar como no hay setter intentar asignarle un valor genera un error t celsius 30 attributeerror property celsius of temperature object has no setter copiar esta es la forma correcta de modelar un valor que solo debe establecerse en el momento de la construcción o a través de métodos específicos agregar un setter con validación decora un segundo método con property_name setter para gestionar las escrituras class temperature def __init__ self celsius self _celsius celsius property def celsius self return self _celsius celsius setter def celsius self value if value 273 15 raise valueerror temperature below absolute zero self _celsius value copiar ahora tanto la lectura como la escritura funcionan con sintaxis de atributo simple t temperature 25 print t celsius 25 t celsius 100 print t celsius 100 t celsius 300 valueerror temperature below absolute zero copiar regla clave el setter y el getter deben compartir el mismo nombre celsius en ambos casos el decorador celsius setter vincula el nuevo método al objeto de propiedad celsius existente propiedades calculadas una propiedad no tiene que corresponder a un atributo almacenado puede calcular un valor en tiempo real a partir de otros datos class temperature def __init__ self celsius self _celsius celsius property def celsius self return self _celsius celsius setter def celsius self value if value 273 15 raise valueerror temperature below absolute zero self _celsius value property def fahrenheit self return self _celsius 9 5 32 copiar fahrenheit no tiene variable de respaldo deriva su valor de _celsius cada vez que se lee t temperature 0 print t fahrenheit 32 0 t celsius 100 print t fahrenheit 212 0 copiar como no hay fahrenheit setter intentar escribir t fahrenheit 100 genera un attributeerror las propiedades calculadas son de solo lectura por naturaleza a menos que añadas explícitamente un setter un ejemplo real de propiedad calculada class rectangle def __init__ self width height self _width width self _height height property def width self return self _width width setter def width self value if value 0 raise valueerror width must be positive self _width value property def height self return self _height height setter def height self value if value 0 raise valueerror height must be positive self _height value property def area self return self _width self _height computed no setter property def perimeter self return 2 self _width self _height computed no setter r rectangle 4 5 print r area 20 print r perimeter 18 r width 10 print r area 50 r width 1 valueerror width must be positive copiar agregar un deleter el decorador property_name deleter te permite ejecutar código cuando el llamador usa del obj attr class temperature def __init__ self celsius self _celsius celsius property def celsius self return self _celsius celsius setter def celsius self value if value 273 15 raise valueerror temperature below absolute zero self _celsius value celsius deleter def celsius self print deleting celsius del self _celsius t temperature 25 del t celsius deleting celsius print t celsius attributeerror temperature object has no attribute _celsius copiar los deleters se usan con menos frecuencia que los getters y setters son útiles cuando se elimina un valor en caché para forzar el recálculo en el próximo acceso se liberan explícitamente recursos vinculados a un atributo se garantiza que una vez eliminado un valor no pueda volver a leerse sin reasignarlo actualizar un atributo simple a una propiedad uno de los mayores beneficios prácticos de property es que puedes comenzar con un atributo público simple y agregar validación después sin cambiar el código que lo llama esto se conoce a veces como el principio de acceso uniforme version 1 plain attribute no validation class circle def __init__ self radius self radius radius c circle 5 print c radius 5 c radius 10 works but nothing stops c radius 1 copiar más adelante necesitas validación con property puedes agregarla sin modificar los llamadores version 2 property with validation public interface unchanged import math class circle def __init__ self radius self radius radius this now calls the setter property def radius self return self _radius radius setter def radius self value if value 0 raise valueerror radius cannot be negative self _radius value property def area self return math pi self _radius 2 c circle 5 print c radius 5 print f c area 4f 78 5398 c radius 10 print c radius 10 c radius 1 valueerror radius cannot be negative copiar cualquier código existente que lea o escriba c radius seguirá funcionando sin modificaciones la función integrada property property es azúcar sintáctico para la función integrada property estas dos definiciones son equivalentes decorator style recommended class person def __init__ self age self _age age property def age self return self _age age setter def age self value if not isinstance value int or value 0 raise valueerror age must be a non negative integer self _age value copiar property style explicit class person def __init__ self age self _age age def _get_age self return self _age def _set_age self value if not isinstance value int or value 0 raise valueerror age must be a non negative integer self _age value def _del_age self del self _age age property _get_age _set_age _del_age the person s age in years copiar property fget fset fdel doc acepta hasta cuatro argumentos una función getter una función setter una función deleter y una cadena de documentación cualquiera de ellos puede ser none p person 30 print p age 30 p age 31 print p age 31 print person age __doc__ the person s age in years copiar la forma con decorador es más limpia y es la recomendación estándar la llamada explícita a property es útil cuando quieres pasar la cadena de documentación sin un bloque de decorador de varias líneas o cuando las funciones de acceso ya existen con otro nombre cómo funcionan las propiedades un breve vistazo a los descriptores internamente property es un descriptor un objeto que define __get__ __set__ y __delete__ en la clase cuando python busca obj attr comprueba si el atributo en la clase es un descriptor y si es así llama a su __get__ en lugar de devolver el valor directamente puedes ver esto inspeccionando el objeto de propiedad en la clase class square def __init__ self side self _side side property def side self return self _side side setter def side self value if value 0 raise valueerror side must be non negative self _side value print type square side class property print square side fget function square side at 0x print square side fset function square side at 0x print square side fdel none copiar por eso leer square side devuelve el objeto de propiedad en sí descriptor accedido en la clase mientras que leer s side en una instancia activa __get__ y devuelve el entero el protocolo de descriptores es el mismo mecanismo que utilizan classmethod staticmethod y las funciones en sí para una exploración más profunda consulta los métodos mágicos de python errores comunes recursión infinita olvidar el guión bajo un error muy común es usar el mismo nombre para la propiedad y el atributo de respaldo class bad property def value self return self value recursionerror this calls the getter again value setter def value self v self value v recursionerror this calls the setter again copiar siempre almacena el valor de respaldo con un nombre diferente por convención con un guión bajo como prefijo class good property def value self return self _value reads the private attribute value setter def value self v self _value v writes the private attribute copiar setter definido antes que el getter el decorador del setter celsius setter hace referencia al objeto de propiedad celsius que debe existir primero define siempre el getter property antes que el setter y el deleter en el cuerpo de la clase __init__ llama al setter automáticamente cuando escribes self radius radius dentro de __init__ python llama al setter si existe esto generalmente es lo que deseas la validación también se ejecuta en el momento de la construcción pero significa que tu setter debe gestionar la asignación inicial correctamente class circle def __init__ self radius self radius radius triggers the setter validation applies here too property def radius self return self _radius radius setter def radius self value if value 0 raise valueerror radius cannot be negative self _radius value circle 1 valueerror radius cannot be negative copiar las propiedades son a nivel de clase no de instancia no puedes agregar una propiedad a una sola instancia como lo harías con atributos regulares las propiedades se definen en la clase y se aplican a todas las instancias si necesitas personalización de atributos por instancia consulta los dataclasses de python o usa un enfoque basado en __slots__ referencia rápida sintaxis qué hace property define el getter el atributo pasa a ser de solo lectura hasta que se agrega un setter name setter define el setter el atributo pasa a ser legible y escribible name deleter define el deleter del obj attr activa este método property fget fset fdel doc función integrada equivalente sin sintaxis de decorador classname prop fget la función getter subyacente classname prop fset la función setter subyacente none si no hay setter classname prop fdel la función deleter subyacente none si no hay deleter práctica práctica which decorator do you use to define a setter for a property named age which decorator do you use to define a setter for a property named age age setter setter age property setter set_age comprobar práctica what happens when you assign to a property that has only a getter defined what happens when you assign to a property that has only a getter defined python raises an attribu...
|