Última actualización: 15 de diciembre de 2023

1.2. Vía rápida en Python

Esta práctica ofrece una introducción rápida a la programación en Python:

1.2.1. Fuertemente tipado

Python 3 es fuertemente tipado, esto significa que el tipo de valor no cambia repentinamente. Una cadena que contiene solo dígitos no se convierte mágicamente en un número. Cada cambio de tipo requiere una conversión explícita.

>>> valor1 = 2
>>> valor2 = "5"
>>> total = valor1 + valor2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> total = valor1 + int(valor2)
>>> print ("El total es: " + str(total))
7

1.2.2. Tipado dinámico

Python 3 es tipado dinámico, significa que los objetos en tiempo de ejecución (valores) tienen un tipo, a diferencia del tipado estático donde las variables tienen un tipo.

>>> variable = 11
>>> print (variable, type(variable))
11 <class 'int'>
>>> variable = "activo"
>>> print (variable, type(variable))
activo <class 'str'>

1.2.3. POO y Clases

Python 3 soporta POO y Clases, significa que todo el Python es un objeto. A continuación se muestra el uso de la Programación Orientado a Objetos implementando la técnica herencia simple de Clases en Python 3:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
import sys


class Persona:
    """Clase que representa una Persona"""

    def __init__(self, cedula, nombre, apellido, sexo):
        """Constructor de clase Persona"""
        self.cedula = cedula
        self.nombre = nombre
        self.apellido = apellido
        self.sexo = sexo

    def __str__(self):
        """Devuelve una cadena representativa al Persona"""
        return "{}: {}, {} {}, {}.".format(
            self.__doc__[25:34],
            str(self.cedula),
            self.nombre,
            self.apellido,
            self.getGenero(self.sexo),
        )

    def hablar(self, mensaje):
        """Mostrar mensaje de saludo de Persona"""
        return mensaje

    def getGenero(self, sexo):
        """Mostrar el genero de la Persona"""
        genero = ("Masculino", "Femenino")
        if sexo == "M":
            return genero[0]
        elif sexo == "F":
            return genero[1]
        else:
            return "Desconocido"


class Supervisor(Persona):
    """Clase que representa a un Supervisor"""

    def __init__(self, cedula, nombre, apellido, sexo, rol):
        """Constructor de clase Supervisor"""

        # Invoca al constructor de clase Persona
        Persona.__init__(self, cedula, nombre, apellido, sexo)

        # Nuevos atributos
        self.rol = rol
        self.tareas = ["10", "11", "12", "13"]

    def __str__(self):
        """Devuelve una cadena representativa al Supervisor"""
        return "{}: {} {}, rol: '{}', sus tareas: {}.".format(
            self.__doc__[26:37],
            self.nombre,
            self.apellido,
            self.rol,
            self.consulta_tareas(),
        )

    def consulta_tareas(self):
        """Mostrar las tareas del Supervisor"""
        return ", ".join(self.tareas)


def poblar_persona():
    """Función que crea objetos desde la clase Persona"""

    # Dos instancias de Objeto Persona
    persona1 = Persona("V-13458796", "Leonardo", "Caballero", "M")
    persona2 = Persona("V-23569874", "Ana", "Poleo", "F")

    print(persona1.__doc__[25:34])
    print(len(persona1.__doc__[25:34]) * "=")

    print("\n" + str(persona1) + "\n")

    print(f"- Cedula de identidad: {persona1.cedula}.")
    print(f"- Nombre completo: {persona1.nombre} {persona1.apellido}.")
    print(f"- Genero: {persona1.getGenero(persona1.sexo)}.")
    print(
        "- {} {} dijo: {}".format(
            persona1.nombre, persona1.apellido, persona1.hablar("Hola Ana :-*")
        )
    )

    print(
        persona1.hablar("\nHola, Soy una Persona")
        + ", me llamo '"
        + persona1.nombre
        + " "
        + persona1.apellido
        + "', con cédula '"
        + persona1.cedula
        + "'."
    )

    print("\nOtra " + persona1.__doc__[25:34])
    print((len(persona1.__doc__[25:34]) + 5) * "-")

    print("\n" + str(persona2) + "\n")

    # Atributo(s) y Método(s) heredado de la clase Persona
    print(f"- Cedula de identidad: {persona2.cedula}.")
    print(f"- Nombre completo: {persona2.nombre} {persona2.apellido}.")
    print("- Genero: {}.".format(persona2.getGenero(persona2.__getattribute__("sexo"))))
    print(
        "- {} {} dijo: {}".format(
            persona2.nombre, persona2.apellido, persona2.hablar("Hola Leonardo ^_^")
        )
    )
    print(
        persona2.hablar("\nHola, Soy otra Persona")
        + ", me llamo '"
        + persona2.__getattribute__("nombre")
        + " "
        + persona2.__getattribute__("apellido")
        + "', con cédula '"
        + persona2.__getattribute__("cedula")
        + "'."
    )


def poblar_supervisor():
    """Función que crea objetos desde la clase Supervisor"""

    # Una instancia de Objeto Supervisor
    supervisor1 = Supervisor("V-16987456", "Pedro", "Pérez", "No se", "El chivo")

    print("\n" + supervisor1.__doc__[26:37])
    print(len(supervisor1.__doc__[26:37]) * "=")

    print("\n" + str(supervisor1) + "\n")

    # Atributo(s) y Método(s) heredado de la clase Persona
    print(f"- Cedula de identidad: {supervisor1.cedula}.")
    print(f"- Nombre completo: {supervisor1.nombre} {supervisor1.apellido}.")
    print(f"- Genero: {supervisor1.getGenero(supervisor1.sexo)}.")
    print(
        "- {} {} dijo: {}".format(
            supervisor1.nombre,
            supervisor1.apellido,
            supervisor1.hablar("A trabajar Leonardo!!!".upper()),
        )
    )

    # Atributo(s) y Método(s) heredado de la clase Supervisor
    print(f"- Rol: {supervisor1.rol}.")
    print(f"- N. Tareas: {supervisor1.consulta_tareas()}.")

    # Mostrar atributo(s) y método(s) propios de la clase Supervisor
    # y los heredados de la clase Persona
    print(
        """\nHola, Soy el {} {} {}, mi cédula es '{}',
mi genero '{}', con el rol '{}' y mis tareas
asignadas '{}'.""".format(
            supervisor1.__doc__[26:37].lower(),
            supervisor1.nombre,
            supervisor1.apellido,
            supervisor1.cedula,
            supervisor1.getGenero(supervisor1.sexo),
            supervisor1.rol,
            supervisor1.consulta_tareas(),
        )
    )


if __name__ == "__main__":
    """Inicia el programa Python"""
    if len(sys.argv) == 2:
        if sys.argv[1] == "persona":
            poblar_persona()
        elif sys.argv[1] == "supervisor":
            poblar_supervisor()
    else:
        print("ERROR: Ingreso cero (0) o más de dos (2) argumentos")
        print("SOLUCIÓN: Introduce los argumentos correctamente")
        print("Ejemplo: python clases.py persona")
        print("Ejemplo: python clases.py supervisor")
elif __name__ == "clases":
    initialize()
else:
    print("El programa esta mal configurado, debe llamar a su modulo")

Importante

Usted puede descargar el código usado en esta sección haciendo clic en los siguientes enlaces: tipado_dinamico.py, fuertemente_tipados.py, y clases.py.

Truco

Para ejecutar el código fuertemente_tipados.py, tipado_dinamico.py y clases.py, abra una consola de comando, acceda al directorio donde se encuentra ambos programas:

leccion1/
├── clases.py
├── fuertemente_tipados.py
└── tipado_dinamico.py

Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:

python3 fuertemente_tipados.py
python3 tipado_dinamico.py
python3 clases.py persona
python3 clases.py supervisor

Ver también

Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.


¿Cómo puedo ayudar?

¡Mi soporte está aquí para ayudar!

Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. GMT-4 - Caracas, Venezuela.

La hora aquí es actualmente 7:35 PM GMT-4.

Mi objetivo es responder a todos los mensajes dentro de un día hábil.

Contrata mi increíble soporte profesional