Meta tags:
description= Aprende el polimorfismo en Python: sobrescritura de métodos, duck typing, sobrecarga de operadores e interfaces abstractas con ejemplos claros.;
Headings (most frequently used words):
polimorfismo, de, en, métodos, duck, typing, con, versus, error, por, el, mediante, usar, python, qué, importa, sobrescritura, funciones, bucles, sobrecarga, operadores, clases, base, abstractas, un, ejemplo, del, mundo, real, procesamiento, pagos, errores, comunes, resumen, práctica, extender, reemplazar, método, padre, cuándo, herencia, abcs, cuál, deberías, verificar, tipos, type, lugar, isinstance, firmas, inconsistentes, argumentos, defecto, mutables, sobrescritos,
Text of the page (most frequently used words):
self (77), #python (74), def (46), polimorfismo (31), return (30), class (28), que (26), animal (26), los (24), con (23), métodos (23), speak (22), area (20), print (19), base (17), una (17), copiar (16), dog (16), aprender (15), clases (15), duck (15), typing (15), matplotlib (14), shape (13), mysql (13), the (12), las (12), float (12), radius (12), height (12), mongodb (12), para (11), elementos (11), del (10), clase (10), método (10), perimeter (10), operadores (9), por (9), tipos (9), __init__ (9), más (9), vector (9), listas (9), abstractas (8), type (8), woof (8), true (8), amount (8), objetos (8), html (7), mediante (7), sobrescritura (7), qué (7), tags (7), strings (7), tipo (7), name (7), tuplas (7), for (6), subclase (6), padre (6), lista (6), bool (6), str (6), abstractmethod (6), abc (6), circle (6), math (6), cada (6), objeto (6), says (6), eliminar (6), datos (6), w3docs (5), sobrecarga (5), funciones (5), polymorphism (5), código (5), sin (5), interfaz (5), cualquier (5), versión (5), tiempo (5), este (5), error (5), como (5), cat (5), requiere (5), forma (5), agregar (5), charge (5), transaction_id (5), currency (5), import (5), side (5), describe (5), width (5), función (5), herencia (5), introduce (5), archivos (5), string (5), crear (5), primeros (5), pasos (5), tutorial (5), variables (5), formatter (5), color (5), json (4), generator (4), práctica (4), errores (4), real (4), bucles (4), this (4), with (4), comportamiento (4), object (4), funciona (4), ejecución (4), none (4), meow (4), escribir (4), esto (4), process_order (4), order (4), charged (4), success (4), paymentprovider (4), refund (4), abcs (4), mismo (4), puedes (4), sobre (4), llama (4), triangle (4), rectangle (4), regresión (4), diccionarios (4), acceder (4), code (3), encoder (3), editor (3), cuestionarios (3), ejercicios (3), php (3), javascript (3), css (3), comunes (3), ejemplo (3), mundo (3), pagos (3), importa (3), abstract (3), implement (3), methods (3), from (3), correct (3), despacho (3), propia (3), volume (3), tiene (3), isinstance (3), pass (3), nuevo (3), solo (3), cambia (3), paypalprovider (3), stripeprovider (3), complete (3), paypal (3), usd (3), stripe (3), transaction (3), aplicar (3), versus (3), blob (3), and (3), print_info (3), momento (3), según (3), son (3), scalar (3), other (3), números (3), bucle (3), cambiar (3), entity (3), human (3), robot (3), pato (3), reemplazar (3), super (3), tweet (3), bird (3), __name__ (3), elif (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), password (2), herramientas (2), try (2), java (2), git (2), libros (2), ejemplos (2), fragmentos (2), resumen (2), procesamiento (2), page (2), encapsulamiento (2), dataclasses (2), previous (2), that (2), subclasses (2), time (2), function (2), way (2), method (2), through (2), objects (2), common (2), parent (2), which (2), following (2), statements (2), about (2), are (2), escribe (2), nombres (2), modificación (2), subclases (2), dunder (2), hacen (2), polimórficos (2), __len__ (2), __add__ (2), correctos (2), independientemente (2), correcta (2), dinámico (2), proporciona (2), else (2), item (2), pero (2), nunca (2), valor (2), defecto (2), argumento (2), entre (2), todas (2), argumentos (2), firmas (2), polimórficas (2), aceptan (2), uniforme (2), false (2), porque (2), devuelve (2), obj (2), lugar (2), nueva (2), provider (2), refunded (2), considera (2), sistema (2), debe (2), múltiples (2), explícita (2), esperada (2), bases (2), quieras (2), contrato (2), usar (2), formal (2), typeerror (2), intentas (2), implementa (2), square (2), allá (2), definición (2), especiales (2), consulta (2), operador (2), ahora (2), enteros (2), shapes (2), distintos (2), usa (2), estándar (2), trabaja (2), están (2), relacionados (2), comparten (2), jerarquía (2), animales (2), común (2), tres (2), uno (2), simplemente (2), hello (2), beep (2), boop (2), cuando (2), override (2), adds (2), vocalization (2), tweety (2), whiskers (2), rex (2), animals (2), definir (2), abierto (2), cerrado (2), make_sound (2), modificar (2), add (2), new (2), leer (2), capítulo (2), interfaces (2), permite (2), handling (2), limit (2), colección (2), delete (2), ordenar (2), cuadrícula (2), dispersión (2), distribución (2), introducción (2), conjuntos (2), set (2), sets (2), hash (2), 2026, derechos, reservados, hecho, desarrolladores, idioma, política, privacidad, contacto, acerca, empresa, tutoriales, gratuitos, web, desde, 2014, next, yes, was, helpful, comprobar, classes, enforce, required, instantiation, operator, overloading, form, recommended, check, polymorphic, compatibility, overriding, inheritance, requires, inherit, lets, single, work, different, types, interface, hace, sea, dependan, concretos, acomodará, naturalmente, nuevas, cambios, extensible, aplican, formalmente, deben, implementar, sean, elige, significa, concepto, not, fix, bad, bug, list, shared, across, all, instances, amplio, confunde, gente, jerarquías, uses, mutable, dict, predeterminado, crea, sola, vez, comparte, llamadas, mutables, sobrescritos, mantén, consistentes, extra, argument, inconsistent, will, cause, errors, loop, supone, implementaciones, mismos, llamadores, tratan, fallarán, inconsistentes, subclass, aware, fragile, breaks, comparar, anula, prefiere, tanto, futura, verificar, sabe, recibe, nada, brindando, extensibilidad, cryptoprovider, attempt, given, brilla, diseños, estilo, plugin, admitir, proveedores, detectan, faltantes, anticipación, aparecen, autocompletado, ide, verificadores, prefierelas, grandes, bibliotecas, públicas, donde, simple, flexible, prefierelo, internas, pequeñas, scripts, cuál, deberías, dan, red, seguridad, permiten, can, instantiate, forgot, instanciar, van, paso, requerido, lanza, instanciarla, revisión, profunda, magic, comporta, manera, diferente, operandos, nivel, __repr__, __mul__, hacer, tus, propias, respondan, definiendo, estos, aritméticos, comparación, también, suma, concatena, fusiona, logra, través, figura, importar, pertenece, adelante, pentagon, 4x6, única, trate, aplicación, dibujo, idiomático, ampliamente, biblioteca, defina, len, integrados, terceros, quieres, lógicamente, enfoque, preferido, situación, cuándo, ninguna, incorporado, embargo, verifica, confía, responderá, correctamente, pertenecer, determinada, necesita, tener, nombrado, así, dicho, camina, grazna, entonces, nominal, estructural, realiza, configuración, registro, útil, aún, ejecutarse, omítelo, completo, keep, output, sobrescribir, completamente, extenderlo, usando, extender, despacha, denomina, enlace, tardío, único, makes, sound, fue, definido, extensión, principio, works, any, has, eso, frágil, esta, branch, every, you, necesitaría, cadena, antes, asegúrate, estar, familiarizado, patrones, prácticos, integrada, importante, cubre, cuatro, pilares, programación, orientada, junto, funcionen, automáticamente, abstracción, encapsulación, griego, muchas, formas, fragmento, funcione, siempre, esos, soporten, nombre, responde, implementación, aprende, claros, peticiones, http, pytest, paquetes, entornos, virtuales, tooling, best, practices, threading, asyncio, concurrency, csv, random, sys, itertools, collections, lanzar, excepciones, standard, library, sumar, dos, invertir, duplicados, how, enumeraciones, static, classmethod, property, mágicos, advanced, oop, sentencia, match, enumerate, zip, map, comprensiones, gestores, contexto, recursión, closures, generadores, decoradores, args, kwargs, sugerencias, intermediate, actualización, find, insertar, join, update, drop, table, where, select, insert, tabla, vecinos, cercanos, curva, auc, roc, validación, 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, 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, usuario, except, pip, regex, matemáticas, fechas, módulos, ámbito, iteradores, arrays, lambda, while, booleanos, casting, comentarios, sintaxis, actualizar, desempaquetar, tupla, segmentación, home, salida, anidados, iterar, comprensión, globales, formato, caracteres, escape, diccionario, concatenar, asignar, 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):
res 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 polimorfismo en python aprende el polimorfismo en python sobrescritura de métodos duck typing sobrecarga de operadores e interfaces abstractas con ejemplos claros el polimorfismo del griego muchas formas permite que un mismo fragmento de código funcione con objetos de distintos tipos siempre que esos objetos soporten la interfaz esperada se llama al mismo nombre de método en cada objeto y cada objeto responde según su propia implementación el polimorfismo es uno de los cuatro pilares de la programación orientada a objetos junto con la encapsulación la herencia y la abstracción es lo que permite que las funciones que aceptan un tipo de clase base funcionen automáticamente con cualquier subclase este capítulo cubre qué es el polimorfismo y por qué es importante polimorfismo mediante sobrescritura de métodos polimorfismo mediante duck typing sobrecarga de operadores una forma de polimorfismo integrada en python clases base abstractas como forma formal de definir interfaces polimórficas patrones prácticos y errores comunes antes de leer este capítulo asegúrate de estar familiarizado con las clases y objetos de python y la herencia en python por qué importa el polimorfismo sin polimorfismo una función que trabaja con animales necesitaría una cadena explícita de if elif para cada tipo de animal def make_sound animal if type animal __name__ dog print woof elif type animal __name__ cat print meow elif type animal __name__ bird print tweet add a new branch every time you add a new animal type copiar eso es frágil cada nuevo tipo de animal requiere modificar esta función con polimorfismo se escribe def make_sound animal animal speak works for any object that has a speak method copiar agregar un nuevo tipo de animal solo requiere definir su método speak la función en sí nunca cambia este es el principio abierto cerrado abierto para extensión cerrado para modificación polimorfismo mediante sobrescritura de métodos la forma más común de polimorfismo en python es la sobrescritura de métodos una subclase proporciona su propia versión de un método que fue definido por la clase padre class animal def __init__ self name self name name def speak self return f self name makes a sound class dog animal def speak self return f self name says woof class cat animal def speak self return f self name says meow class bird animal def speak self return f self name says tweet copiar ahora un único bucle funciona para los tres tipos animals dog rex cat whiskers bird tweety for animal in animals print animal speak rex says woof whiskers says meow tweety says tweet copiar animal speak despacha a la versión correcta en tiempo de ejecución según el tipo real del objeto este despacho en tiempo de ejecución se denomina despacho dinámico o enlace tardío extender versus reemplazar el método padre al sobrescribir puedes reemplazar completamente el comportamiento del padre o extenderlo usando super class animal def speak self print animal vocalization class dog animal def speak self super speak keep the parent s output print woof dog override adds this dog speak animal vocalization woof dog override adds this copiar usa super cuando la versión del padre realiza una configuración o registro útil que aún debe ejecutarse omítelo cuando quieras reemplazar el comportamiento por completo polimorfismo mediante duck typing el sistema de tipos de python es estructural y no nominal un objeto no tiene que pertenecer a una jerarquía de clases determinada simplemente necesita tener los métodos correctos esto se llama duck typing nombrado así por el dicho si camina como un pato y grazna como un pato entonces es un pato class dog def speak self return woof class robot def speak self return beep boop class human def speak self return hello def introduce entity print entity speak introduce dog woof introduce robot beep boop introduce human hello copiar dog robot y human no comparten ninguna clase padre común más allá del object incorporado sin embargo introduce funciona con los tres porque cada uno tiene un método speak la función no verifica qué tipo es entity simplemente llama al método y confía en que el objeto responderá correctamente cuándo usar duck typing versus herencia situación enfoque preferido los objetos están relacionados lógicamente todos son animales jerarquía de herencia los objetos no están relacionados pero comparten un comportamiento duck typing quieres aplicar la interfaz en el momento de la definición clases base abstractas se trabaja con tipos integrados o clases de terceros que no puedes cambiar duck typing el duck typing es idiomático en python y se usa ampliamente en la biblioteca estándar por ejemplo len funciona en cualquier object que defina __len__ independientemente de su clase polimorfismo con funciones y bucles puedes escribir una única función que trate distintos tipos de forma uniforme mediante el polimorfismo considera una aplicación de dibujo class circle def __init__ self radius self radius radius def area self import math return math pi self radius 2 def describe self return f circle with radius self radius class rectangle def __init__ self width height self width width self height height def area self return self width self height def describe self return f rectangle self width x self height class triangle def __init__ self base height self base base self height height def area self return 0 5 self base self height def describe self return f triangle base self base height self height shapes circle 5 rectangle 4 6 triangle 3 8 for shape in shapes print f shape describe area shape area 2f circle with radius 5 area 78 54 rectangle 4x6 area 24 00 triangle base 3 height 8 area 12 00 copiar el bucle llama a area y describe en cada figura sin importar a qué clase pertenece el objeto agregar una clase pentagon más adelante solo requiere escribir la nueva clase el bucle no cambia sobrecarga de operadores los operadores aritméticos y de comparación de python también son polimórficos sobre enteros suma números sobre strings los concatena sobre listas los fusiona python logra esto a través de métodos especiales dunder puedes hacer que tus propias clases respondan a operadores definiendo estos métodos class vector def __init__ self x y self x x self y y def __add__ self other return vector self x other x self y other y def __mul__ self scalar return vector self x scalar self y scalar def __repr__ self return f vector self x self y v1 vector 1 2 v2 vector 3 4 print v1 v2 vector 4 6 print v1 3 vector 3 6 copiar el mismo operador ahora se comporta de manera diferente según si los operandos son enteros strings o objetos vector esto es polimorfismo a nivel de operador para una revisión profunda de los métodos especiales de python consulta python magic methods polimorfismo con clases base abstractas las clases base abstractas abcs van un paso más allá del duck typing al aplicar la interfaz en el momento de la definición de la clase si una subclase no implementa un método requerido python lanza un typeerror en el momento en que intentas instanciarla from abc import abc abstractmethod class shape abc abstractmethod def area self float return the area of the shape abstractmethod def perimeter self float return the perimeter of the shape class circle shape def __init__ self radius float self radius radius def area self float import math return math pi self radius 2 def perimeter self float import math return 2 math pi self radius class square shape def __init__ self side float self side side def area self float return self side 2 def perimeter self float return 4 self side def print_info shape shape none print f area shape area 2f print f perimeter shape perimeter 2f print_info circle 5 area 78 54 perimeter 31 42 print_info square 4 area 16 00 perimeter 16 00 copiar si intentas instanciar una subclase que no implementa area class blob shape pass forgot to implement area and perimeter b blob typeerror can t instantiate abstract class blob with abstract methods area perimeter copiar las abcs te dan la red de seguridad de un contrato formal y al mismo tiempo permiten el polimorfismo en tiempo de ejecución abcs versus duck typing cuál deberías usar el duck typing es más simple y flexible prefierelo para bases de código internas pequeñas y scripts las abcs hacen explícita la interfaz esperada detectan errores de métodos faltantes con anticipación y aparecen en el autocompletado de ide y en los verificadores de tipos prefierelas en bases de código más grandes bibliotecas públicas y en cualquier lugar donde quieras aplicar un contrato un ejemplo del mundo real procesamiento de pagos el polimorfismo brilla en los diseños estilo plugin considera un sistema de pagos que debe admitir múltiples proveedores from abc import abc abstractmethod class paymentprovider abc abstractmethod def charge self amount float currency str bool attempt to charge the given amount return true on success abstractmethod def refund self transaction_id str bool refund a previous transaction return true on success class stripeprovider paymentprovider def charge self amount float currency str bool print f stripe charged amount currency return true def refund self transaction_id str bool print f stripe refunded transaction transaction_id return true class paypalprovider paymentprovider def charge self amount float currency str bool print f paypal charged amount currency return true def refund self transaction_id str bool print f paypal refunded transaction transaction_id return true def process_order provider paymentprovider amount float none success provider charge amount usd if success print order complete process_order stripeprovider 99 99 stripe charged 99 99 usd order complete process_order paypalprovider 49 5 paypal charged 49 5 usd order complete copiar process_order no sabe ni le importa si recibe un stripeprovider o un paypalprovider agregar un nuevo cryptoprovider solo requiere escribir la nueva clase nada más cambia esto es el polimorfismo brindando extensibilidad en el mundo real errores comunes error 1 verificar tipos con type en lugar de isinstance comparar type obj dog anula el polimorfismo porque devuelve false para las subclases prefiere isinstance obj animal que devuelve true tanto para dog como para cualquier subclase futura class animal pass class dog animal pass d dog fragile breaks for subclasses print type d animal false correct subclass aware print isinstance d animal true copiar error 2 firmas de métodos inconsistentes el polimorfismo supone que todas las implementaciones de un método aceptan los mismos argumentos si dog speak requiere un argumento que cat speak no tiene los llamadores que los tratan de forma uniforme fallarán inconsistent will cause errors in a loop class dog def speak self volume extra argument return f woof at volume volume class cat def speak self return meow copiar mantén las firmas de los métodos consistentes entre las clases polimórficas error 3 argumentos por defecto mutables en métodos sobrescritos este es un error más amplio de python pero confunde a la gente en las jerarquías de clases nunca uses un valor mutable por defecto lista dict como valor de argumento predeterminado se crea una sola vez y se comparte entre todas las llamadas bug the list is shared across all instances class item def __init__ self tags bad self tags tags fix class item def __init__ self tags none self tags tags if tags is not none else copiar resumen concepto qué significa sobrescritura de métodos una subclase proporciona su propia versión de un método padre despacho dinámico python elige la versión correcta del método en tiempo de ejecución duck typing cualquier object con los métodos correctos funciona independientemente...
|