Anatomía de la clase: el constructor __init__

Programación orientada a objetos en Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Métodos y atributos

  • Los métodos son definiciones de funciones dentro de una clase
  • self como primer argumento
  • Define atributos por asignación
  • Refiérete a atributos en la clase con self.___

   

class MyClass:
    # definición de función en clase
    # 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
        ...
Programación orientada a objetos en Python

Constructor

  • ¿Agregar datos al objeto al crearlo?
  • El método constructor __init__() se llama cada vez que se crea un objeto.
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- Crea el atributo .name y asígnalo al parámetro name
        print("El método __init__ fue llamado")

cust = Customer("Lara de Silva") #<--- __init__ se llama implícitamente print(cust.name)
El método __init__ fue llamado
Lara de Silva
Programación orientada a objetos en Python
class Customer:
       def __init__(self, name, balance):  # <-- parámetro balance añadido

self.name = name self.balance = balance # <-- atributo balance añadido print("El método __init__ fue llamado")
cust = Customer("Lara de Silva", 1000) # <-- __init__ es llamado print(cust.name) print(cust.balance)
El método __init__ fue llamado
Lara de Silva
1000
Programación orientada a objetos en Python
class Customer:
       def __init__(self, name, balance=0):  #<-- valor por defecto para balance

self.name = name self.balance = balance print("El método __init__ fue llamado")
cust = Customer("Lara de Silva") # <-- no especificar balance explícitamente
print(cust.name) print(cust.balance) # <-- atributo creado de todos modos
El método __init__ fue llamado
Lara de Silva
0
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()
obj.my_method1(val1) # <-- attr1 creado
obj.my_method2(val2) # <-- attr2 creado

Atributos en el constructor

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

# Todos los atributos se crean obj = MyClass(val1, val2)
  • más fácil conocer todos los atributos
  • los atributos se crean al crear el objeto
  • código más usable y mantenible
Programación orientada a objetos en Python

Mejores prácticas

1. Inicializa atributos en __init__()
Programación orientada a objetos en Python

Mejores prácticas

1. Inicializa atributos en __init__()
2. Nombres

CamelCase para clases, lower_snake_case para funciones y atributos

Programación orientada a objetos en Python

Mejores prácticas

1. Inicializa atributos en __init__()
2. Nombres

CamelCase para clase, lower_snake_case para funciones y atributos

3. Mantén self como self
class MyClass:
    # Esto funciona pero no es recomendable
    def my_method(kitty, attr):
       kitty.attr = attr
Programación orientada a objetos en Python

Mejores prácticas

1. Inicializa atributos en __init__()
2. Nombres

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
Programación orientada a objetos en Python

¡Vamos a practicar!

Programación orientada a objetos en Python

Preparing Video For Download...