Meta tags:
description= Aprende el encapsulamiento en Python: miembros públicos, protegidos y privados, name mangling, y getters/setters con @property.;
Headings (most frequently used words):
encapsulamiento, de, miembros, por, qué, name, mangling, getters, setters, con, property, un, la, guion, bajo, en, python, importa, el, niveles, acceso, público, protegido, privado, ejemplo, completo, cuenta, usuario, vs, otros, pilares, poo, referencia, rápida, práctica, públicos, protegidos, simple, privados, doble, __, herencia, getter, básico, añadir, setter, validación, preferir, sobre, simples,
Text of the page (most frequently used words):
python (76), self (64), que (29), def (27), los (24), una (21), con (20), #property (18), print (17), para (16), copiar (16), aprender (15), class (15), password (14), encapsulamiento (14), return (14), celsius (14), matplotlib (14), clase (13), mysql (13), name (12), __init__ (12), mongodb (12), datos (11), métodos (11), radius (11), elementos (11), mangling (10), acceso (10), owner (10), por (9), the (9), público (8), _balance (8), solo (8), public (8), sin (8), value (8), base (8), listas (8), html (7), attribute (7), setter (7), más (7), atributo (7), código (7), balance (7), guion (7), bajo (7), tuplas (7), protegido (6), privado (6), qué (6), clases (6), fuera (6), llamadores (6), _login_attempts (6), login (6), sobre (6), temperature (6), _celsius (6), atributos (6), las (6), eliminar (6), w3docs (5), desde (5), ejemplo (5), getters (5), setters (5), interno (5), consulta (5), herencia (5), user (5), simple (5), child (5), esto (5), bankaccount (5), __pin (5), miembros (5), del (5), acceder (5), archivos (5), string (5), strings (5), crear (5), primeros (5), pasos (5), tutorial (5), variables (5), lista (5), formatter (5), color (5), json (4), generator (4), práctica (4), otros (4), pilares (4), polimorfismo (4), validación (4), nombre (4), pero (4), interfaz (4), privados (4), __hash (4), username (4), account (4), wrong (4), private (4), protected (4), cambiar (4), fahrenheit (4), hace (4), como (4), __secret (4), __count (4), internamente (4), acc (4), amount (4), públicos (4), regresión (4), diccionarios (4), desarrolladores (3), code (3), encoder (3), editor (3), cuestionarios (3), ejercicios (3), php (3), javascript (3), css (3), referencia (3), poo (3), cuenta (3), usuario (3), niveles (3), importa (3), this (3), abstractas (3), all (3), access (3), from (3), not (3), lectura (3), accesible (3), uso (3), convención (3), método (3), son (3), modificar (3), __password_hash (3), cualquiera (3), bad (3), alice (3), hash (3), may (3), valueerror (3), works (3), puedes (3), ningún (3), attributeerror (3), reveal_child (3), _child__secret (3), reveal (3), but (3), increment (3), subclases (3), cómo (3), doble (3), exterior (3), and (3), protegidos (3), nomenclatura (3), puede (3), leer (3), saldo (3), objetos (3), objeto (3), cadenas (3), recorrer (3), unir (3), ver (3), tools (3), todos (2), italiano (2), português (2), español (2), français (2), русский (2), deutsch (2), english (2), beautifier (2), diff (2), herramientas (2), try (2), java (2), git (2), libros (2), fragmentos (2), rápida (2), completo (2), page (2), object (2), outside (2), internal (2), what (2), does (2), single (2), leading (2), underscore (2), signal (2), escritura (2), controlado (2), getter (2), esta (2), libremente (2), exponer (2), ocultar (2), permitir (2), tipos (2), llamada (2), agrupar (2), detalles (2), definición (2), uno (2), cuatro (2), almacenamiento (2), puramente (2), interna (2), tienes (2), dos (2), está (2), subclase (2), podría (2), lógica (2), bien (2), locked (2), secret123 (2), useraccount (2), check_password (2), method (2), interface (2), helper (2), subclasses (2), need (2), siguiente (2), tres (2), valor (2), _radius (2), raise (2), still (2), circle (2), same (2), propiedad (2), llame (2), below (2), absolute (2), zero (2), valores (2), antes (2), añadir (2), llama (2), mantiene (2), control (2), reads (2), _base__secret (2), accesses (2), cada (2), nombres (2), _counter__count (2), vars (2), counter (2), evitar (2), sigue (2), 1000 (2), pin (2), inicial (2), renombra (2), relacionado (2), señal (2), detalle (2), escribir (2), reglas (2), convenciones (2), prefijo (2), usa (2), lugar (2), implementación (2), error (2), capítulo (2), mundo (2), handling (2), números (2), limit (2), colección (2), delete (2), ordenar (2), cuadrícula (2), dispersión (2), distribución (2), introducción (2), bucles (2), conjuntos (2), set (2), sets (2), agregar (2), 2026, derechos, reservados, hecho, idioma, política, privacidad, contacto, acerca, empresa, tutoriales, ejemplos, gratuitos, web, 2014, next, previous, yes, was, helpful, comprobar, marks, shared, instances, deleted, when, garbage, collected, prevents, convention, meaning, use, hooks, deleter, parcialmente, modifica, _nombreclase__name, __name, convencionalmente, límites, _name, siempre, úsalo, impone, señala, simplificada, complejidad, abstracción, diferentes, respondan, misma, reutilice, extienda, otra, internos, línea, principio, principios, estrategia, contraseñas, tienen, razón, verla, luego, cambias, bcrypt, esas, cosas, leerlo, implementar, inteligente, throttledaccount, lea, observa, successful, part, official, implementation, detail, change, muestra, trabajando, juntos, realista, completa, incluyendo, deleters, escribieron, siguen, funcionando, cambios, cambia, comportamiento, ahora, valida, cannot, negative, caller, point, view, with, validation, plain, empezar, tarde, actualizarlo, preferir, simples, calculada, define, lanza, intentas, asignarle, 300, 212, 100, 273, combina, validar, almacenarlos, parentheses, needed, leen, invisible, básico, muchos, lenguajes, escriben, explícitos, proporciona, enfoque, limpio, decorador, permite, legible, mientras, total, set_x, get_x, ambos, coexisten, colisión, sería, posible, stored, thing, super, especialmente, útil, sobrescribir, accidentalmente, padre, usando, mismo, obtiene, propio, espacio, list, inspeccionar, descubrir, modificado, dir, mangled, you, know, direct, fails, cuando, dentro, reescribe, propósito, colisiones, accidentales, proporcionar, verdadera, seguridad, _nombreclase__nombre, __nombre, existiendo, diferente, sección, saber, encontrarlo, has, frowned, upon, fine, verify_pin, meant, touched, 1234, desencadena, accidental, sea, mucho, difícil, _nombreclase__atributo, común, almacena, puedan, leerlos, manteniéndolo, oculto, siendo, advierte, linters, están, rompiendo, contrato, previsto, float, int, isinstance, _validate_amount, dice, favor, dependas, ello, cumplir, necesita, ninguna, especial, cualquier, miembro, pass, deposit, instance, savings, account_type, forman, oficial, parte, usen, pretende, estas, estrictas, impuestas, compilador, confía, respeten, mecanismos, activamente, fácil, utilizable, externamente, recomendado, destinado, ser, usado, significado, nivel, tiene, modificadores, palabras, clave, cambio, indicar, intención, dependen, pública, funciona, reducción, acoplamiento, representación, almacenar, saldos, centavos, dólares, tocar, flexibilidad, aplicada, vez, integridad, beneficios, resuelve, ocultando, detrás, controlada, depositar, retirar, dinero, través, aplican, negocio, nunca, tocan, directamente, 9999999, considera, bancaria, lleva, seguimiento, ese, pudiera, establecer, nada, impediría, actor, malicioso, hiciera, asegúrate, estar, familiarizado, mediante, calculados, estrechamente, real, une, todo, funcionan, realmente, __doble_guion_bajo, este, cubre, aplicado, consistente, estado, oculta, puedas, cambiarlos, adelante, romper, tus, sean, seguras, usar, programación, orientada, consiste, operan, esos, sola, unidad, controlando, partes, aprende, 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, dataclasses, static, classmethod, mágicos, advanced, oop, sentencia, match, enumerate, zip, map, comprensiones, gestores, contexto, recursión, 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, normal, percentil, desviación, estándar, media, mediana, moda, machine, learning, gráficos, pastel, histogramas, barras, subplot, etiquetas, líneas, marcadores, trazado, pyplot, django, scipy, pandas, numpy, modules, manejo, file, formateo, entrada, except, pip, regex, matemáticas, fechas, módulos, ámbito, iteradores, arrays, lambda, funciones, for, while, else, operadores, booleanos, casting, comentarios, sintaxis, actualizar, desempaquetar, tupla, segmentación, home, salida, anidados, iterar, comprensión, globales, formato, caracteres, escape, diccionario, concatenar, asignar, múltiples, conjunto, 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):
oncatenar strings copiar diccionarios copiar listas métodos de diccionario caracteres de escape cadenas de formato variables globales unir listas unir sets unir tuplas comprensión de listas métodos de lista iterar sobre diccionarios recorrer listas recorrer sets recorrer tuplas modificar strings diccionarios anidados variables de salida python home listas de python conjuntos en python python strings tuplas en python variables en python eliminar elementos eliminar elementos de una lista eliminar elementos de un set métodos 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 encapsulamiento en python aprende el encapsulamiento en python miembros públicos protegidos y privados name mangling y getters setters con property el encapsulamiento es uno de los cuatro pilares de la programación orientada a objetos consiste en agrupar los datos de un objeto atributos y los métodos que operan sobre esos datos en una sola unidad controlando qué partes del objeto puede acceder o modificar el mundo exterior bien aplicado el encapsulamiento mantiene consistente el estado interno de un objeto oculta los detalles de implementación para que puedas cambiarlos más adelante sin romper el código que lo llama y hace que tus clases sean más seguras de usar este capítulo cubre qué es el encapsulamiento y por qué importa miembros públicos protegidos y privados y las convenciones de nomenclatura que usa python name mangling cómo funcionan realmente los atributos con __doble_guion_bajo getters y setters con property un ejemplo del mundo real que une todo antes de leer asegúrate de estar familiarizado con las clases y objetos de python para el control de acceso mediante atributos calculados consulta el capítulo estrechamente relacionado sobre property por qué importa el encapsulamiento considera una cuenta bancaria internamente lleva un seguimiento del saldo si ese saldo fuera un atributo simple que cualquiera pudiera establecer nada impediría que un error o un actor malicioso hiciera account balance 9999999 copiar el encapsulamiento resuelve esto ocultando el saldo detrás de una interfaz controlada el código fuera de la clase solo puede depositar o retirar dinero a través de métodos que aplican las reglas de negocio el almacenamiento interno es un detalle de implementación los llamadores nunca lo tocan directamente los tres beneficios que esto te da son integridad de datos la lógica de validación en un solo lugar aplicada cada vez flexibilidad puedes cambiar la representación interna p ej almacenar saldos en centavos en lugar de dólares sin tocar ningún código que lo llame reducción del acoplamiento los llamadores dependen solo de la interfaz pública no de cómo funciona internamente la clase niveles de acceso público protegido y privado python no tiene modificadores de acceso como las palabras clave private o public en cambio usa una convención de nomenclatura para indicar la intención prefijo ejemplo nivel de acceso significado sin prefijo balance público destinado a ser usado por cualquiera guion bajo simple _ _balance protegido para uso interno y subclases utilizable externamente pero no recomendado doble guion bajo __ __pin privado solo para esta clase python lo renombra activamente para evitar el acceso fácil estas son convenciones y mecanismos no reglas estrictas impuestas por un compilador python confía en que los desarrolladores respeten la señal miembros públicos los atributos y métodos públicos forman la interfaz oficial de la clase la parte que se pretende que usen los llamadores class bankaccount account_type savings public class attribute def __init__ self owner balance self owner owner public instance attribute def deposit self amount pass public method copiar no se necesita ninguna nomenclatura especial cualquier código puede leer o escribir un miembro público libremente miembros protegidos guion bajo simple _ un guion bajo inicial es una señal que dice esto es un detalle interno por favor no dependas de ello desde fuera de la clase python no lo hace cumplir es puramente una convención class bankaccount def __init__ self owner balance self owner owner self _balance balance protected internal but subclasses may need it def _validate_amount self amount protected helper return isinstance amount int float and amount 0 copiar _balance sigue siendo accesible como account _balance desde el exterior pero el guion bajo advierte a otros desarrolladores y a los linters que están rompiendo el contrato previsto un uso común una clase base almacena datos en un atributo _ para que las subclases puedan leerlos manteniéndolo oculto del código no relacionado miembros privados doble guion bajo __ un doble guion bajo inicial desencadena el name mangling python renombra el atributo internamente a _nombreclase__atributo esto hace que el acceso accidental desde el exterior sea mucho más difícil class bankaccount def __init__ self owner balance self owner owner self _balance balance self __pin 1234 private not meant to be touched at all def verify_pin self pin return pin self __pin copiar desde fuera de la clase acc bankaccount alice 1000 print acc owner alice public fine print acc _balance 1000 protected works but frowned upon print acc __pin attributeerror bankaccount object has no attribute __pin copiar el atributo sigue existiendo pero con un nombre diferente consulta la siguiente sección para saber cómo encontrarlo name mangling cuando python ve self __nombre dentro de una definición de clase lo reescribe internamente como self _nombreclase__nombre esto es el name mangling su propósito es evitar colisiones accidentales en las subclases no proporcionar verdadera seguridad class counter def __init__ self self __count 0 def increment self self __count 1 def value self return self __count c counter c increment c increment print c value 2 direct access fails print c __count attributeerror but mangled name still works if you know it print c _counter__count 2 copiar puedes inspeccionar todos los atributos con vars o dir para descubrir el nombre modificado print list vars c _counter__count copiar name mangling y la herencia el name mangling es especialmente útil en la herencia sin él una subclase podría sobrescribir accidentalmente un atributo privado de su padre usando el mismo nombre con el mangling cada clase obtiene su propio espacio de nombres class base def __init__ self self __secret base def reveal self return self __secret accesses _base__secret class child base def __init__ self super __init__ self __secret child stored as _child__secret not the same thing def reveal_child self return self __secret accesses _child__secret c child print c reveal base base reveal reads _base__secret print c reveal_child child child reveal_child reads _child__secret copiar ambos atributos coexisten sin colisión lo que no sería posible sin el name mangling getters y setters con property en muchos lenguajes se escriben métodos explícitos get_x y set_x python proporciona un enfoque más limpio el decorador property permite exponer un método como si fuera un atributo simple por lo que el código que lo llama se mantiene legible mientras tienes control total sobre la lectura y escritura getter básico class temperature def __init__ self celsius self _celsius celsius property def celsius self return self _celsius copiar los llamadores leen t celsius no t celsius el property hace invisible la llamada al método t temperature 25 print t celsius 25 no parentheses needed copiar añadir un setter con validación combina property con un setter para validar los valores antes de almacenarlos 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 t temperature 25 print t celsius 25 print t fahrenheit 77 0 t celsius 100 print t fahrenheit 212 0 t celsius 300 valueerror temperature below absolute zero copiar fahrenheit es una propiedad calculada de solo lectura no se define ningún setter por lo que python lanza un attributeerror si intentas asignarle un valor por qué preferir property sobre getters setters simples puedes empezar con un atributo público simple y actualizarlo a una propiedad más tarde sin cambiar ningún código que lo llame v1 plain attribute class circle def __init__ self radius self radius radius v2 property with validation same public interface class circle def __init__ self radius self radius radius still works from the caller s point of view 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 copiar los llamadores que escribieron c radius 5 siguen funcionando sin cambios solo cambia el comportamiento ahora se valida el valor para una referencia completa sobre property incluyendo deleters consulta python property un ejemplo completo cuenta de usuario el siguiente ejemplo muestra los tres niveles de acceso trabajando juntos en una clase realista class useraccount def __init__ self username password self username username public self _login_attempts 0 protected subclasses may need this self __password_hash self __hash password private def __hash self password private helper implementation detail may change return hash password def check_password self password public method part of the official interface return self __hash password self __password_hash def login self password if self _login_attempts 3 return account locked if self check_password password self _login_attempts 0 return login successful self _login_attempts 1 return f wrong password self _login_attempts 3 user useraccount alice secret123 print user login bad wrong password 1 3 print user login bad wrong password 2 3 print user login bad wrong password 3 3 print user login secret123 account locked copiar observa username es público está bien que cualquiera lo lea _login_attempts está protegido una subclase throttledaccount podría leerlo para implementar una lógica más inteligente __password_hash y __hash son privados la estrategia de almacenamiento de contraseñas es puramente interna los llamadores no tienen razón para verla y si luego cambias a bcrypt solo tienes que modificar esas dos cosas encapsulamiento vs otros pilares de la poo el encapsulamiento es uno de los cuatro principios de la poo principio definición en una línea encapsulamiento agrupar datos métodos ocultar detalles internos herencia permitir que una clase reutilice y extienda otra clase polimorfismo permitir que diferentes tipos respondan a la misma llamada de método abstracción exponer una interfaz simplificada ocultar la complejidad consulta python herencia python polimorfismo y clases abstractas de python para los otros pilares referencia rápida convención lo que señala lo impone python name público úsalo libremente no siempre accesible _name protegido uso interno no accesible pero convencionalmente fuera de límites __name privado solo esta clase parcialmente el nombre se modifica a _nombreclase__name property acceso de lectura controlado sí hooks getter setter deleter name setter acceso de escritura controlado con validación sí práctica práctica what does a single leading underscore e g _balance signal in python what does a single leading underscore e g _balance signal in python it is a convention meaning internal use do not access from outside the class python prevents all access to the attribute from outside the class the attribute is deleted when the object is garbage collected it marks a class attribute shared by all instances comprobar was this page helpful yes no previous polimorfismo next clases abstractas on this page por qué importa el encapsulamiento niveles de acceso público protegido y privado name mangling getters y setters con property un ejemplo completo cuenta de usuario encapsulamiento vs otros pilares de la poo referencia rápida práctica w3docs tutoriales ejemplos ejercicios fragmentos y cuestionarios gratuitos para la web desde 2014 libros aprender html aprender css aprender javascript aprender git aprender java aprender ph...
|