Aprende a implementar programación orientada a objetos en Python con claridad y buenas prácticas: desde el uso del keyword class y la convención CamelCase, hasta el método especial Dunder init y la dot notation para acceder a propiedades y métodos. Con un ejemplo práctico de una clase Persona, verás cómo inicializar, formatear salidas y ejecutar un script de forma segura.
¿Cómo se declara una clase en Python y qué convención usa?
Para crear una clase en Python se utiliza el keyword class seguido del nombre en CamelCase, y se abre el bloque con dos puntos. Este estilo refuerza que Python es “un lenguaje de convenciones”. Dentro, se definen métodos y propiedades.
Usa class para declarar la clase.
Nombra la clase con CamelCase.
Abre el bloque con : como en funciones.
Un método clave es init (llamado Dunder init). Su objetivo es inicializar la clase con los parámetros de construcción. Además, se usa self como referencia a la propia instancia para acceder a propiedades y métodos internos.
self referencia la instancia actual.
init inicializa propiedades con los argumentos recibidos.
Puedes marcar atributos como privados con guion bajo. En Python se puede acceder, pero es mala práctica hacerlo.
Ejemplo base de una clase con convención y un método sin implementación usando pass:
classAirplane:def__init__(self, passangers, seats, pilots): self.passangers = passangers
self.seats = seats
self._pilot = pilots # atributo "privado" por convencióndeftake_off(self):pass
Puntos esenciales:
Variables privadas por convención: prefijo guion bajo. Es mala práctica acceder fuera de la clase.
Métodos: se definen como funciones dentro de la clase y siempre reciben self primero.
take off: ejemplo de método; aquí sin implementación con pass.
¿Cómo se instancia y cómo funciona la dot notation?
Instanciar es “construir” un objeto a partir de la clase. En Python no se usa el keyword new. Existe Dunder new, pero no es necesario para este flujo de trabajo. Se crea una instancia llamando el nombre de la clase con sus argumentos y asignándola a una variable.
No se utiliza new al instanciar en Python.
Se pasa la inicialización como parámetros del constructor.
Se accede a propiedades y métodos con dot notation.
Ejemplo genérico de instanciación y acceso:
airplane = Airplane(passangers, seats, pilots)# Acceso/edición de propiedades# airplane.passangers = 150# Llamada a métodos# airplane.take_off()
Claves prácticas:
dot notation: uso del punto para leer o asignar propiedades.
Llamar métodos requiere paréntesis. Sin paréntesis, solo es una referencia en memoria.
¿Cómo crear la clase persona y ejecutar say_hello?
Se propone crear un archivo personas.py y definir una clase simple con nombre y edad. El método Dunder init asigna las propiedades internas. Luego, un método say_hello imprime un mensaje usando los datos de la instancia con self.
classPersona:def__init__(self, name, age): self.name = name
self.age = age
defsay_hello(self):print(f"Hello. My name is {self.name}. And I am {self.age} years old.")if __name__ =="__main__": person = Persona("David",34)print(f"age: {person.age}") person.say_hello()
Qué ocurre en la ejecución:
Se inicializa la clase con nombre y edad.
Se accede a la propiedad age con dot notation.
Se llama al método say_hello con paréntesis.
Habilidades y conceptos que practicarás:
Programación orientada a objetos: modelar entidades con clases y métodos.
class y init: síntesis de creación e inicialización de objetos.
self: referencia interna para acceder a propiedades y métodos.
Encapsulamiento por convención: atributos con guion bajo como “privados”.
dot notation: lectura y asignación de propiedades; llamada de métodos.
pass: marcador de no implementación temporal.
Formateo de cadenas: integrar placeholders con valores reales.
Ejecución controlada: punto de entrada con if name equals main.
¿Te quedó alguna duda o quieres compartir tu propia variante del ejemplo? Comenta cómo nombrarías tus métodos o qué atributos “privados” usarías y por qué.
new() - es el responsable de** crear la instancia**, devuelve como objecto la instancia referencia. Cuando finaliza la ejecución del new, se procede a la llamada el method ini().
Exacto!
gracias!
Cuando se construye un objeto, se inicializa invocando al método init.
Cuando leemos nuestro código decimos “dunder init” cada vez que nos encontramos con la cadena de caracteres init.
En inglés:
When a new object is made, it is initialized by calling the init method on the object. init is pronounced “dunder init”: dunder is short for “double-underscore”.
Una disculpa el editor de comentarios me jugo una broma:
la cadena de caractéres debe ser:
_ _ i n i t _ _
sin espacios, a _ _ (sin espacios) se le llama “doble underscore”, de ahí que se le abrevia como “dunder”
d de doble y under de underscore.
El self, para los que vengan de JS, funciona como el this keyword.
Justo fue lo que pensé :D
Gracias por hacer la comparación :)
Me alegra haber aprendido POO en Java, sino estaría muy confundido en este momento, como lo estuve cuando lo vi por primera vez.
utiliza new cuando quieras controlar la creación del objeto
utiliza init cuando quieras gestionar la inicialización del objeto
new es lo primero que se ejecuta cuando se instancia una clase y es el responsable de devolver una instancia de esa clase.
init no devuelve nada y solo se encarga de inicializar los valores iniciales del objeto
Encontré este ejemplo de decoradores en metodos, es pero que les sea de ayuda.
Upper Case: Todas las letras del identificador se encuentran en mayúsculas, por ejemplo: EJEMPLODENOMENCLATURA. Es usado, por ejemplo, para las constantes definidas en PHP.
CamelCase:El nombre viene porque se asemeja a las dos jorobas de un camello, y se puede dividir en dos tipos:– UpperCamelCase, cuando la primera letra de cada una de las palabras es mayúscula.También denominado PascalCase.Ejemplo:EjemploDeNomenclatura.–LowerCamelCase, igual que la anterior con la excepción de que la primera letra es minúscula.Ejemplo: ejemploDeNomenclatura.Es muy usada en los #hashTags de Twitter o en lenguajes como Java,PHP,C#…
SnakeCase:Cuando cada una de las palabras, se separa por un guión bajo(_).Es común en los nombres de variables y funciones de lenguajes como C, aunque también Ruby y Python lo han adoptado.Como el CamelCase existen variedades, como todas las letras en mayúsuculas, denominado SCREAMING_SNAKE_CASE, que se utiliza para definir constantes.Ejemplo: ejemplo_de_nomenclatura
KebabCase:Es igual que el SnakeCase, esta vez, son guiones medios(-) los que separan las palabras.Su uso más común es de las urls.Ejemplo: ejemplo-de-nomenclatura
¡Que genial! me gustó mucho conocer esta información.
Este es el código que se vió en la clase con algunas modificaciones simples para hacer un poco más interactivo:
classPerson: def __init__(self, name, age): self.name= name
self.age= age
def say_hello(self):print(f'Hello, my name is {self.name} and I am {self.age} years old')if __name__ =='__main__': name =input('What is your name? ') age =int(input('What is your age? ')) person =Person(name, age)print(f'Age: {person.age}') person.say_hello()
Muy buen curso Platzi y David Aroesti
Hola, que hace esta linea de código
print(f'Age: {person.age}')
Es lo mismo que hacer
print("Age: {}".format(person.age))
Es solo un modo reducido de hacer lo mismo. Puedes usar ambas formas.
classPersona: def __init__(self, name,age): self.name=name
self.age=age
def say_hello(self):print('Hola , mi nombre es {} , y tengo {} años'.format(self.name,self.age))if __name__ =="__main__": _nombre=input('porfavor digite su nombre') _edad=input('porfavor digite su edad') persona_=Persona(_nombre,_edad) persona_.say_hello()```
La realidad es que el método init crea el objeto y luego lo inicializa, no es el constructor como tal, en cambio el método new sólo construye el objeto.
Python, new se usa cuando necesita controlar la creación de una nueva instancia, mientras que init se usa cuando necesita controlar la inicialización de una nueva instancia.
new es el primer paso de la creación de la instancia. Se llama primero y es responsable de devolver una nueva instancia de su clase.
Por el contrario, init no devuelve nada; solo es responsable de inicializar la instancia después de que se haya creado.
De que me sirve saber el identificador de donde esta alojada en memoria mi variable o funcion. Es decir de que me sirve el retorno de la funcion id()?
Pues casi nunca se usa. id () (o su equivalente) se utiliza en el operador is de python, ahí el mismo lenguaje le encontraría una utilidad.
¡Hola @MDCMC! Como es sabido que Python reutiliza muchas cosas, como strings y números, muchas veces conocer el identificador de una variable te sirve en el momento de desarrollo para verificar si otra variable apunta al mismo objeto en memoria ;) y así, por consiguiente, ahorrarte bugs 👌🏼
El init, es un método muy esencial además también de que siempre tenemos que tener el kw self, para referirnos a la clase misma.
El metodo init es como el constructor que usamos en Java.
Sí, hay mucha relación entre los lenguajes, ¿Ya hiciste el curso de POO? ahí utilizan cuatro diferentes lenguajes y puedes ver las diferencias entre cada uno.
El new(dunder new). Se utiliza muy poco sin embargo tiene el proposito de usarse cuando se hacen subclases de de tipos inmutables como lo son las tuplas y los string.
Aqui les dejo una guia ligera!
el “self” funciona como el “this” de otros lenguajes como Java.