{"id":398,"date":"2024-12-21T19:46:57","date_gmt":"2024-12-21T19:46:57","guid":{"rendered":"https:\/\/equipomedios.com\/blog\/?p=398"},"modified":"2024-10-18T19:49:42","modified_gmt":"2024-10-18T19:49:42","slug":"herencia-en-python","status":"publish","type":"post","link":"https:\/\/equipomedios.com\/blog\/herencia-en-python\/","title":{"rendered":"Herencia en Python"},"content":{"rendered":"<h1>Herencia<\/h1>\n<p>La herencia es una de las premisas y t\u00e9cnicas de la\u00a0<span class=\"std std-ref\">POO<\/span>\u00a0la cual permite a los programadores crear una clase general primero y luego m\u00e1s tarde crear clases m\u00e1s especializadas que re-utilicen c\u00f3digo de la clase general. La herencia tambi\u00e9n le permite escribir un c\u00f3digo m\u00e1s limpio y legible.<\/p>\n<div id=\"clase-base\" class=\"section\"><span id=\"python-poo-clase-base\"><\/span><\/p>\n<h2>Clase Base<\/h2>\n<p>Clase Base o tambi\u00e9n conocida como\u00a0<em>Clase abstracta<\/em>\u00a0le permite definir una clase que puede heredarse en otras clases los atributos y comportamientos definido en esta.<\/p>\n<div id=\"id1\" class=\"figure align-center\"><a class=\"reference internal image-reference\" href=\"https:\/\/i0.wp.com\/entrenamiento-python-basico.readthedocs.io\/es\/2.7\/_images\/clase_abstracta.png?ssl=1\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/entrenamiento-python-basico.readthedocs.io\/es\/2.7\/_images\/clase_abstracta.png?w=640&#038;ssl=1\" alt=\"..\/_images\/clase_abstracta.png\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p class=\"caption\"><span class=\"caption-text\">Clase base o abstracta<\/span><\/p>\n<\/div>\n<p>Use el diagrama anterior para ilustrar el concepto de la herencia, vea el caso de dos clases que tiene algo en com\u00fan, ambas son personas, con atributos de datos personales y comportamiento t\u00edpicos como hablar, comer, caminar, entonces para eso se crea una clase base llamada\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>. A continuaci\u00f3n un ejemplo de la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>\u00a0con un m\u00e9todo interno:<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"k\">class<\/span> <span class=\"nc\">Persona<\/span><span class=\"p\">(<\/span><span class=\"nb\">object<\/span><span class=\"p\">):<\/span>\r\n    <span class=\"sd\">\"\"\"Clase que representa una Persona\"\"\"<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">cedula<\/span><span class=\"p\">,<\/span> <span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> <span class=\"n\">sexo<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Constructor de clase Persona\"\"\"<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">cedula<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cedula<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span> <span class=\"o\">=<\/span> <span class=\"n\">nombre<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">apellido<\/span> <span class=\"o\">=<\/span> <span class=\"n\">apellido<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">sexo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sexo<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"fm\">__str__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Devuelve una cadena representativa de Persona\"\"\"<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"s2\">\"<\/span><span class=\"si\">%s<\/span><span class=\"s2\">: <\/span><span class=\"si\">%s<\/span><span class=\"s2\">, <\/span><span class=\"si\">%s<\/span> <span class=\"si\">%s<\/span><span class=\"s2\">, <\/span><span class=\"si\">%s<\/span><span class=\"s2\">.\"<\/span> <span class=\"o\">%<\/span> <span class=\"p\">(<\/span>\r\n            <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"vm\">__doc__<\/span><span class=\"p\">[<\/span><span class=\"mi\">25<\/span><span class=\"p\">:<\/span><span class=\"mi\">34<\/span><span class=\"p\">],<\/span> <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">cedula<\/span><span class=\"p\">),<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> \r\n            <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">getGenero<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">sexo<\/span><span class=\"p\">))<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"nf\">hablar<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">mensaje<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Mostrar mensaje de saludo de Persona\"\"\"<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">mensaje<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"nf\">getGenero<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">sexo<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Mostrar el genero de la Persona\"\"\"<\/span>\r\n        <span class=\"n\">genero<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"s1\">'Masculino'<\/span><span class=\"p\">,<\/span><span class=\"s1\">'Femenino'<\/span><span class=\"p\">)<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"n\">sexo<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">\"M\"<\/span><span class=\"p\">:<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"n\">genero<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\r\n        <span class=\"k\">elif<\/span> <span class=\"n\">sexo<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">\"F\"<\/span><span class=\"p\">:<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"n\">genero<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span>\r\n        <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"s2\">\"Desconocido\"<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>En el ejemplo previo, es donde empieza a crear una clase (lo hace con la palabra\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">class<\/span><\/code>). La segunda palabra\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>\u00a0es el nombre de la clase. La tercera palabra que se encuentra dentro de los par\u00e9ntesis este hace referencia al objeto\u00a0<span class=\"std std-ref\">object<\/span>, usando para indicar la clase de la cual precede.<\/p>\n<p>La clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>\u00a0tiene los m\u00e9todos\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">__init__<\/span><\/code>,\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">__str__<\/span><\/code>,\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">hablar<\/span><\/code>\u00a0y\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">getGenero<\/span><\/code>. Sus atributos son\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">cedula<\/span><\/code>,\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">nombre<\/span><\/code>,\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">apellido<\/span><\/code>\u00a0y\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">sexo<\/span><\/code>.<\/p>\n<p>La instancia de dos nuevos objetos\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>\u00a0seria de la siguiente forma:<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"n\">persona1<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"V-13458796\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"Leonardo\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"Caballero\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"M\"<\/span><span class=\"p\">)<\/span>\r\n<span class=\"n\">persona2<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"V-23569874\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"Ana\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"Poleo\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"F\"<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>El m\u00e9todo constructor\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">__init__<\/span><\/code>\u00a0es un m\u00e9todo especial el cual debe escribir como:\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">MiClase(par\u00e1metros<\/span>\u00a0<span class=\"pre\">iniciales<\/span>\u00a0<span class=\"pre\">si<\/span>\u00a0<span class=\"pre\">hay<\/span>\u00a0<span class=\"pre\">cualquiera)<\/span><\/code>.<\/p>\n<p>Usted puede llamar esos m\u00e9todos y atributos con la siguiente notaci\u00f3n:\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">claseinstancia.metodo<\/span><\/code>\u00a0o\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">claseinstancia.atributo<\/span><\/code>.<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">print<\/span> <span class=\"n\">persona1<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">persona1<\/span><span class=\"o\">.<\/span><span class=\"n\">apellido<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">print<\/span> <span class=\"n\">persona1<\/span><span class=\"o\">.<\/span><span class=\"n\">getGenero<\/span><span class=\"p\">(<\/span><span class=\"n\">persona1<\/span><span class=\"o\">.<\/span><span class=\"n\">sexo<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>El m\u00e9todo\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">__str__<\/span><\/code>\u00a0es un m\u00e9todo usando para imprimir la descripci\u00f3n de la instancia de objeto el cual debe mostrar como:<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"nb\">print<\/span> <span class=\"s2\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">persona1<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">\"<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>En el anterior c\u00f3digo se usan para cierto formato para imprimir la instancia de objeto usando la sentencia\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">print<\/span><\/code>, concatenando el car\u00e1cter\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">\\n<\/span><\/code>\u00a0para generar un salto de p\u00e1gina y seguidamente convertir a formato cadena de caracteres usando la funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">str()<\/span><\/code>\u00a0a la instancia de objeto llamada\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">persona2<\/span><\/code>.<\/p>\n<\/div>\n<div id=\"herencia-simple\" class=\"section\"><span id=\"python-poo-herencia-simple\"><\/span><\/p>\n<h2>Herencia simple<\/h2>\n<p>La herencia simple se apoya en el uso de\u00a0<span class=\"std std-ref\">clases base<\/span>\u00a0para compartir sus atributos y comportamientos con otros clases derivadas como los siguiente ejemplos el objeto\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Supervisor<\/span><\/code>\u00a0y el objeto\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Obrero<\/span><\/code>.<\/p>\n<div id=\"id2\" class=\"figure align-center\"><a class=\"reference internal image-reference\" href=\"https:\/\/i0.wp.com\/entrenamiento-python-basico.readthedocs.io\/es\/2.7\/_images\/poo_herencia.png?ssl=1\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/entrenamiento-python-basico.readthedocs.io\/es\/2.7\/_images\/poo_herencia.png?w=640&#038;ssl=1\" alt=\"..\/_images\/poo_herencia.png\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p class=\"caption\"><span class=\"caption-text\">Diagrama de herencia de Objetos<\/span><\/p>\n<\/div>\n<p>El siguiente es un ejemplo de la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Supervisor<\/span><\/code>\u00a0que derivada de la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>\u00a0con funci\u00f3n interna:<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"k\">class<\/span> <span class=\"nc\">Supervisor<\/span><span class=\"p\">(<\/span><span class=\"n\">Persona<\/span><span class=\"p\">):<\/span>\r\n    <span class=\"sd\">\"\"\"Clase que representa a un Supervisor\"\"\"<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">cedula<\/span><span class=\"p\">,<\/span> <span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> <span class=\"n\">sexo<\/span><span class=\"p\">,<\/span> <span class=\"n\">rol<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Constructor de clase Supervisor\"\"\"<\/span>\r\n\r\n        <span class=\"c1\"># Invoca al constructor de clase Persona<\/span>\r\n        <span class=\"n\">Persona<\/span><span class=\"o\">.<\/span><span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">cedula<\/span><span class=\"p\">,<\/span> <span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> <span class=\"n\">sexo<\/span><span class=\"p\">)<\/span>\r\n\r\n        <span class=\"c1\"># Nuevos atributos<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">rol<\/span> <span class=\"o\">=<\/span> <span class=\"n\">rol<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">tareas<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s1\">'10'<\/span><span class=\"p\">,<\/span><span class=\"s1\">'11'<\/span><span class=\"p\">,<\/span><span class=\"s1\">'12'<\/span><span class=\"p\">,<\/span><span class=\"s1\">'13'<\/span><span class=\"p\">]<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"fm\">__str__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Devuelve una cadena representativa al Supervisor\"\"\"<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"s2\">\"<\/span><span class=\"si\">%s<\/span><span class=\"s2\">: <\/span><span class=\"si\">%s<\/span> <span class=\"si\">%s<\/span><span class=\"s2\">, rol: '<\/span><span class=\"si\">%s<\/span><span class=\"s2\">', sus tareas: <\/span><span class=\"si\">%s<\/span><span class=\"s2\">.\"<\/span> <span class=\"o\">%<\/span> <span class=\"p\">(<\/span>\r\n            <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"vm\">__doc__<\/span><span class=\"p\">[<\/span><span class=\"mi\">26<\/span><span class=\"p\">:<\/span><span class=\"mi\">37<\/span><span class=\"p\">],<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> \r\n            <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">rol<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">consulta_tareas<\/span><span class=\"p\">())<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"nf\">consulta_tareas<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Mostrar las tareas del Supervisor\"\"\"<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"s1\">', '<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">tareas<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Ahora, se crear\u00e1 una nueva clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Supervisor<\/span><\/code>\u00a0con los mismos m\u00e9todos y atributos como la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>, pero con dos nuevos atributos\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">rol<\/span><\/code>\u00a0y\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">tareas<\/span><\/code>. No se copia la clase previa, pero si\u00a0<strong>se hereda<\/strong>\u00a0de ella.<\/p>\n<p>La instancia del nuevo objeto\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Supervisor<\/span><\/code>\u00a0seria de la siguiente forma:<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"n\">supervisor1<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Supervisor<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"V-16987456\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"Jen\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"Paz\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"D\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"Chivo\"<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Luego que gener\u00e1 la instancia del nuevo objeto\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Supervisor<\/span><\/code>\u00a0llamada\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">supervisor1<\/span><\/code>\u00a0se puede imprimir sus detalles de la siguiente forma:<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"nb\">print<\/span> <span class=\"s2\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">supervisor1<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">\"<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Como la instancia de objeto\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">supervisor1<\/span><\/code>\u00a0hereda los atributo(s) y m\u00e9todo(s) de la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>\u00a0usted puede reusarlo y llamarlo de la siguiente forma:<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"nb\">print<\/span> <span class=\"s2\">\"- Cedula de identidad: <\/span><span class=\"si\">{0}<\/span><span class=\"s2\">.\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span><span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">cedula<\/span><span class=\"p\">)<\/span>\r\n<span class=\"nb\">print<\/span> <span class=\"s2\">\"- Nombre completo: <\/span><span class=\"si\">{0}<\/span> <span class=\"si\">{1}<\/span><span class=\"s2\">.\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span>\r\n\t<span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">apellido<\/span><span class=\"p\">)<\/span>\r\n<span class=\"nb\">print<\/span> <span class=\"s2\">\"- Genero: <\/span><span class=\"si\">{0}<\/span><span class=\"s2\">.\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span>\r\n\t<span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">getGenero<\/span><span class=\"p\">(<\/span><span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">sexo<\/span><span class=\"p\">))<\/span>\r\n<span class=\"nb\">print<\/span> <span class=\"s2\">\"- <\/span><span class=\"si\">{0}<\/span> <span class=\"si\">{1}<\/span><span class=\"s2\"> dijo: <\/span><span class=\"si\">{2}<\/span><span class=\"s2\">\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span>\r\n\t<span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> \r\n\t<span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">hablar<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"A trabajar Leonardo!!!\"<\/span><span class=\"o\">.<\/span><span class=\"n\">upper<\/span><span class=\"p\">()))<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Si desea usar los atributo(s) y m\u00e9todo(s) heredados de la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Supervisor<\/span><\/code>\u00a0se puede imprimir de la siguiente forma:<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"nb\">print<\/span> <span class=\"s2\">\"- Rol: <\/span><span class=\"si\">{0}<\/span><span class=\"s2\">.\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span><span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">rol<\/span><span class=\"p\">)<\/span>\r\n<span class=\"nb\">print<\/span> <span class=\"s2\">\"- N. Tareas: <\/span><span class=\"si\">{0}<\/span><span class=\"s2\">.\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span><span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">consulta_tareas<\/span><span class=\"p\">())<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>El uso de las clases y la programaci\u00f3n orientada a objetos, le permite a usted que pueda organizar el c\u00f3digo con diferentes clases correspondientes a diferentes objetos que encontrar\u00e1 (una clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>, una clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Carro<\/span><\/code>, una clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Departamento<\/span><\/code>, etc.), con sus propios m\u00e9todos y atributos. Luego puede usar la herencia para considerar las variaciones en torno a una clase base y reutilizar el c\u00f3digo. Ej.: a partir de una clase base de\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>, usted puede crear clases derivadas como\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Supervisor<\/span><\/code>,\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">JefeCuadrilla<\/span><\/code>,\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Obrero<\/span><\/code>, etc.<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"nb\">print<\/span> <span class=\"s2\">\"\"\"<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">Hola, Soy el <\/span><span class=\"si\">{0}<\/span> <span class=\"si\">{1}<\/span> <span class=\"si\">{2}<\/span><span class=\"s2\">, mi c\u00e9dula es '<\/span><span class=\"si\">{3}<\/span><span class=\"s2\">', <\/span>\r\n<span class=\"s2\">mi genero '<\/span><span class=\"si\">{4}<\/span><span class=\"s2\">', con el rol '<\/span><span class=\"si\">{5}<\/span><span class=\"s2\">' y mis tareas<\/span>\r\n<span class=\"s2\">asignadas '<\/span><span class=\"si\">{6}<\/span><span class=\"s2\">'.\"\"\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"vm\">__doc__<\/span><span class=\"p\">[<\/span><span class=\"mi\">26<\/span><span class=\"p\">:<\/span><span class=\"mi\">37<\/span><span class=\"p\">]<\/span><span class=\"o\">.<\/span><span class=\"n\">lower<\/span><span class=\"p\">(),<\/span>\r\n    <span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> <span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">cedula<\/span><span class=\"p\">,<\/span> \r\n    <span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">getGenero<\/span><span class=\"p\">(<\/span><span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">sexo<\/span><span class=\"p\">),<\/span> <span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">rol<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"n\">supervisor1<\/span><span class=\"o\">.<\/span><span class=\"n\">consulta_tareas<\/span><span class=\"p\">())<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<div id=\"funcion-issubclass\" class=\"section\">\n<h3>Funci\u00f3n issubclass()<\/h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">issubclass()<\/span><\/code>, es una\u00a0<span class=\"std std-ref\">funci\u00f3n integrada<\/span>\u00a0la cual le permite corroborar si un objeto es instancia de una clase.<\/p>\n<div class=\"admonition note\"><\/div>\n<div class=\"admonition important\"><\/div>\n<div class=\"admonition tip\">\n<div class=\"last highlight-default notranslate\">\n<div class=\"highlight\">\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"herencia-multiple\" class=\"section\"><span id=\"python-poo-herencia-multiple\"><\/span><\/p>\n<h2>Herencia m\u00faltiple<\/h2>\n<p>A diferencia de lenguajes como\u00a0<em>Java<\/em>\u00a0y\u00a0<em>C#<\/em>, el lenguaje\u00a0<em>Python<\/em>\u00a0permite la herencia m\u00faltiple, es decir, se puede heredar de m\u00faltiples clases.<\/p>\n<p>La herencia m\u00faltiple es la capacidad de una subclase de heredar de m\u00faltiples s\u00faper clases.<\/p>\n<p>Esto conlleva un problema, y es que si varias s\u00faper clases tienen los mismos atributos o m\u00e9todos, la subclase s\u00f3lo podr\u00e1 heredar de una de ellas.<\/p>\n<p>En estos casos Python dar\u00e1 prioridad a las clases m\u00e1s a la izquierda en el momento de la declaraci\u00f3n de la subclase:<\/p>\n<div class=\"highlight-python notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"k\">class<\/span> <span class=\"nc\">Destreza<\/span><span class=\"p\">(<\/span><span class=\"nb\">object<\/span><span class=\"p\">):<\/span>\r\n    <span class=\"sd\">\"\"\"Clase la cual representa la Destreza de la Persona\"\"\"<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">area<\/span><span class=\"p\">,<\/span> <span class=\"n\">herramienta<\/span><span class=\"p\">,<\/span> <span class=\"n\">experiencia<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Constructor de clase Destreza\"\"\"<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">area<\/span> <span class=\"o\">=<\/span> <span class=\"n\">area<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">herramienta<\/span> <span class=\"o\">=<\/span> <span class=\"n\">herramienta<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">experiencia<\/span> <span class=\"o\">=<\/span> <span class=\"n\">experiencia<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"fm\">__str__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Devuelve una cadena representativa de la Destreza\"\"\"<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"s2\">\"\"\"Destreza en el \u00e1rea <\/span><span class=\"si\">%s<\/span><span class=\"s2\"> con la herramienta <\/span><span class=\"si\">%s<\/span><span class=\"s2\">, <\/span>\r\n<span class=\"s2\">        tiene <\/span><span class=\"si\">%s<\/span><span class=\"s2\"> a\u00f1os de experiencia.\"\"\"<\/span> <span class=\"o\">%<\/span> <span class=\"p\">(<\/span>\r\n            <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">area<\/span><span class=\"p\">),<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">experiencia<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">herramienta<\/span><span class=\"p\">)<\/span>\r\n\r\n\r\n<span class=\"k\">class<\/span> <span class=\"nc\">JefeCuadrilla<\/span><span class=\"p\">(<\/span><span class=\"n\">Supervisor<\/span><span class=\"p\">,<\/span> <span class=\"n\">Destreza<\/span><span class=\"p\">):<\/span>\r\n    <span class=\"sd\">\"\"\"Clase la cual representa al Jefe de Cuadrilla\"\"\"<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">cedula<\/span><span class=\"p\">,<\/span> <span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> <span class=\"n\">sexo<\/span><span class=\"p\">,<\/span> \r\n        <span class=\"n\">rol<\/span><span class=\"p\">,<\/span> <span class=\"n\">area<\/span><span class=\"p\">,<\/span> <span class=\"n\">herramienta<\/span><span class=\"p\">,<\/span> <span class=\"n\">experiencia<\/span><span class=\"p\">,<\/span> <span class=\"n\">cuadrilla<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Constructor de clase Jefe de Cuadrilla\"\"\"<\/span>\r\n\r\n        <span class=\"c1\"># Invoca al constructor de clase Supervisor<\/span>\r\n        <span class=\"n\">Supervisor<\/span><span class=\"o\">.<\/span><span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">cedula<\/span><span class=\"p\">,<\/span> <span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> <span class=\"n\">sexo<\/span><span class=\"p\">,<\/span> \r\n            <span class=\"n\">rol<\/span><span class=\"p\">)<\/span>\r\n        <span class=\"c1\"># Invoca al constructor de clase Destreza<\/span>\r\n        <span class=\"n\">Destreza<\/span><span class=\"o\">.<\/span><span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">area<\/span><span class=\"p\">,<\/span> <span class=\"n\">herramienta<\/span><span class=\"p\">,<\/span> <span class=\"n\">experiencia<\/span><span class=\"p\">)<\/span>\r\n\r\n        <span class=\"c1\"># Nuevos atributos<\/span>\r\n        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">cuadrilla<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cuadrilla<\/span>\r\n\r\n    <span class=\"k\">def<\/span> <span class=\"fm\">__str__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\r\n        <span class=\"sd\">\"\"\"Devuelve cadena representativa al Jefe de Cuadrilla\"\"\"<\/span>\r\n        <span class=\"n\">jq<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"<\/span><span class=\"si\">{0}<\/span><span class=\"s2\">: <\/span><span class=\"si\">{1}<\/span> <span class=\"si\">{2}<\/span><span class=\"s2\">, rol '<\/span><span class=\"si\">{3}<\/span><span class=\"s2\">', tareas <\/span><span class=\"si\">{4}<\/span><span class=\"s2\">, cuadrilla: <\/span><span class=\"si\">{5}<\/span><span class=\"s2\">\"<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">jq<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"vm\">__doc__<\/span><span class=\"p\">[<\/span><span class=\"mi\">28<\/span><span class=\"p\">:<\/span><span class=\"mi\">46<\/span><span class=\"p\">],<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">apellido<\/span><span class=\"p\">,<\/span> \r\n            <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">rol<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">consulta_tareas<\/span><span class=\"p\">(),<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">cuadrilla<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<div id=\"method-resolution-order-mro\" class=\"section\"><span id=\"python-poo-herencia-multiple-mro\"><\/span><\/p>\n<h3>Method Resolution Order (MRO)<\/h3>\n<p>Ese es el orden en el cual el m\u00e9todo debe heredar en la presencia de herencia m\u00faltiple. Usted puede ver el MRO usando el atributo\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">__mro__<\/span><\/code>.<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">JefeCuadrilla<\/span><span class=\"o\">.<\/span><span class=\"vm\">__mro__<\/span>\r\n<span class=\"go\">(&lt;class '__main__.JefeCuadrilla'&gt;,<\/span>\r\n<span class=\"go\">&lt;class '__main__.Supervisor'&gt;,<\/span>\r\n<span class=\"go\">&lt;class '__main__.Persona'&gt;,<\/span>\r\n<span class=\"go\">&lt;class '__main__.Destreza'&gt;,<\/span>\r\n<span class=\"go\">&lt;type 'object'&gt;)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">Supervisor<\/span><span class=\"o\">.<\/span><span class=\"vm\">__mro__<\/span>\r\n<span class=\"go\">(&lt;class '__main__.Supervisor'&gt;,<\/span>\r\n<span class=\"go\">&lt;class '__main__.Persona'&gt;,<\/span>\r\n<span class=\"go\">&lt;type 'object'&gt;)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">Destreza<\/span><span class=\"o\">.<\/span><span class=\"vm\">__mro__<\/span>\r\n<span class=\"go\">(&lt;class '__main__.Destreza'&gt;,<\/span>\r\n<span class=\"go\">&lt;type 'object'&gt;)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>El\u00a0<em>MRO<\/em>\u00a0es calculado en Python de la siguiente forma:<\/p>\n<p>Un m\u00e9todo en la llamada derivada es siempre llamada antes de m\u00e9todo de la clase base. En nuestro ejemplo, la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">JefeCuadrilla<\/span><\/code>\u00a0es llamada antes de las clases\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Supervisor<\/span><\/code>\u00a0o\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Destreza<\/span><\/code>. Esas dos clases son llamada antes de la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>\u00a0y la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Persona<\/span><\/code>\u00a0es llamada antes de la clase\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">object<\/span><\/code>.<\/p>\n<p>Si hay herencia m\u00faltiple como\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">JefeCuadrilla(Supervisor,<\/span>\u00a0<span class=\"pre\">Destreza)<\/span><\/code>, el m\u00e9todo invoca a\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">Supervisor<\/span><\/code>\u00a0primero por que ese aparece primero de izquierda a derecha.<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Herencia La herencia es una de las premisas y t\u00e9cnicas de la\u00a0POO\u00a0la cual permite a los programadores crear una clase general primero y luego m\u00e1s tarde crear clases m\u00e1s especializadas que re-utilicen c\u00f3digo de la clase general. La herencia tambi\u00e9n le permite escribir un c\u00f3digo m\u00e1s limpio y legible. Clase Base Clase Base o tambi\u00e9n [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":331,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[39,40],"tags":[],"class_list":["post-398","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","category-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/equipomedios.com\/blog\/wp-content\/uploads\/2024\/08\/python-logo-master-v3-TM.png?fit=601%2C203&ssl=1","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/posts\/398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/comments?post=398"}],"version-history":[{"count":1,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/posts\/398\/revisions"}],"predecessor-version":[{"id":399,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/posts\/398\/revisions\/399"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/media\/331"}],"wp:attachment":[{"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/media?parent=398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/categories?post=398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/tags?post=398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}