Anatomía de una clase: el constructor __init__

Introducción a la programación orientada a objetos en Python

George Boorman

Curriculum Manager, DataCamp

Métodos y atributos

  • Los métodos son funciones definidas dentro de una clase
  • self como primer argumento
  • Define atributos por asignación
  • Dentro de la clase, referencia atributos con self.___
  • Llamar a muchos métodos puede no ser sostenible
class MyClass:
    # definición de función en la clase
    # el primer argumento es self
    def my_method1(self, other_args...):
        # haz cosas aquí

def my_method2(self, my_attr): # atributo creado por asignación self.my_attr = my_attr ...
Introducción a la programación orientada a objetos en Python

Constructor

  • Añade datos al objeto al crearlo
  • El método constructor __init__() se llama cada vez que se crea un objeto
    • Se llama automáticamente por la sintaxis __methodname__
class Customer:
    def __init__(self, name):
        # Crea el atributo .name y asígnalo al parámetro name
        self.name = name
        print("The __init__ method was called")
Introducción a la programación orientada a objetos en Python

Constructor

# __init__ se llama implícitamente 
cust = Customer("Lara de Silva")   
print(cust.name)
The __init__ method was called
Lara de Silva
Introducción a la programación orientada a objetos en Python

Atributos en métodos

class MyClass:
    def my_method1(self, attr1):
        self.attr1 = attr1
        ...

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...

obj = MyClass() # attr1 creado obj.my_method1(val1) # attr2 creado obj.my_method2(val2)

Atributos en el constructor

class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        ...

# Se crean todos los atributos obj = MyClass(val1, val2)
  • En general, usa el constructor
  • Los atributos se crean al crear el objeto
  • Código más usable y mantenible
Introducción a la programación orientada a objetos en Python

Añadir argumentos

class Customer:
    # Añade el argumento balance
    def __init__(self, name, balance): 

self.name = name # Añade el atributo balance self.balance = balance print("The __init__ method was called")
Introducción a la programación orientada a objetos en Python

Añadir parámetros

# __init__ se llama
cust = Customer("Lara de Silva", 1000)
print(cust.name)
print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Introducción a la programación orientada a objetos en Python

Argumentos por defecto

class Customer:
    # Define un valor por defecto para balance
    def __init__(self, name, balance=0):
        self.name = name
        # Asigna el nuevo atributo
        self.balance = balance
        print("The __init__ method was called")
Introducción a la programación orientada a objetos en Python

Argumentos por defecto

# No especifiques balance explícitamente
cust = Customer("Lara de Silva")

print(cust.name) # El atributo balance se crea igualmente print(cust.balance)
The __init__ method was called
Lara de Silva
0
Introducción a la programación orientada a objetos en Python

Buenas prácticas

1. Inicializa atributos en __init__()
Introducción a la programación orientada a objetos en Python

Buenas prácticas

1. Inicializa atributos en __init__()
2. Nomenclatura

CamelCase para clases, lower_snake_case para funciones y atributos

Introducción a la programación orientada a objetos en Python

Buenas prácticas

1. Inicializa atributos en __init__()
2. Nomenclatura

CamelCase para clase, lower_snake_case para funciones y atributos

3. Mantén self como self
class MyClass:
    # Esto funciona, pero no se recomienda
    def my_method(george, attr):
        george.attr = attr
Introducción a la programación orientada a objetos en Python

Buenas prácticas

1. Inicializa atributos en __init__()
2. Nomenclatura

CamelCase para clase, lower_snake_case para funciones y atributos

3. self es self
4. Usa docstrings
class MyClass:
    """Esta clase no hace nada"""
    pass
Introducción a la programación orientada a objetos en Python

¡Vamos a practicar!

Introducción a la programación orientada a objetos en Python

Preparing Video For Download...