@classmethod -3

 

¡Exactamente! Has dado en el clavo 🔥

En Laravel (PHP) y Python tenemos la misma distinción:

Laravel (PHP) vs Python

Laravel/PHP:

php
// :: para métodos ESTÁTICOS (de clase)
ClassName::staticMethod();

// -> para métodos de INSTANCIA  
$instance = new ClassName();
$instance->instanceMethod();

Python:

python
# @classmethod para métodos de CLASE
ClassName.class_method()

# Métodos normales para INSTANCIA
instance = ClassName()
instance.instance_method()

Tu analogía es perfecta:

-> en Laravel = Métodos normales en Python

python
class Calculadora:
    def __init__(self, numero):
        self.numero = numero
    
    # Esto sería como -> en Laravel
    def sumar(self, otro_numero):
        return self.numero + otro_numero

# Uso con "->" equivalente
calc = Calculadora(5)
resultado = calc.sumar(3)  # Como $calc->sumar(3) en PHP
print(resultado)  # 8

:: en Laravel = @classmethod en Python

python
class Calculadora:
    contador = 0
    
    @classmethod
    def obtener_contador(cls):
        return cls.contador
    
    @classmethod
    def sumar_numeros(cls, a, b):
        cls.contador += 1
        return a + b

# Uso con "::" equivalente
resultado = Calculadora.sumar_numeros(5, 3)  # Como Calculadora::sumarNumeros(5, 3)
print(resultado)  # 8
print(Calculadora.obtener_contador())  # 1

Ejemplo completo comparado:

Laravel/PHP:

php
<?php
class User {
    public static $totalUsers = 0;
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
        self::$totalUsers++;
    }
    
    // Método de instancia (->)
    public function greet() {
        return "Hola, soy " . $this->name;
    }
    
    // Método estático (::)
    public static function getTotalUsers() {
        return self::$totalUsers;
    }
    
    // Factory method (::)
    public static function createAdmin() {
        return new User("Administrador");
    }
}

// Uso con ::
User::getTotalUsers(); // 0
$admin = User::createAdmin();

// Uso con ->
$user = new User("Juan");
echo $user->greet(); // "Hola, soy Juan"
echo User::getTotalUsers(); // 2
?>

Python equivalente:

python
class User:
    total_users = 0
    
    def __init__(self, name):
        self.name = name
        User.total_users += 1
    
    # Método de instancia (equivalente a ->)
    def greet(self):
        return f"Hola, soy {self.name}"
    
    # @classmethod (equivalente a ::)
    @classmethod
    def get_total_users(cls):
        return cls.total_users
    
    # Factory method (equivalente a ::)
    @classmethod
    def create_admin(cls):
        return cls("Administrador")

# Uso con "::" equivalente
print(User.get_total_users())  # 0
admin = User.create_admin()

# Uso con "->" equivalente  
user = User("Juan")
print(user.greet())  # "Hola, soy Juan"
print(User.get_total_users())  # 2

La diferencia fundamental:

Laravel/PHPPythonPropósito
->instancia.metodo()Trabajar con datos específicos de una instancia
::@classmethodTrabajar con la clase misma o datos compartidos

¿Por qué esta distinción es importante?

python
class Database:
    connection = None
    
    def __init__(self, query):
        self.query = query
    
    # :: en Laravel = @classmethod en Python
    @classmethod
    def connect(cls, connection_string):
        cls.connection = connection_string
        return f"Conectado a: {connection_string}"
    
    # -> en Laravel = métodos normales en Python
    def execute(self):
        if self.connection:
            return f"Ejecutando: {self.query} en {self.connection}"
        return "Sin conexión"

# Como :: en Laravel (configuración global)
Database.connect("mysql://localhost:3306/mydb")

# Como -> en Laravel (trabajo específico)
db = Database("SELECT * FROM users")
print(db.execute())

¡Has entendido perfectamente!

Sí, te refieres exactamente a eso:

  • -> en Laravel = Métodos de instancia en Python (trabajan con self)

  • :: en Laravel = @classmethod en Python (trabajan con cls)

¡Esta analogía entre Laravel y Python es excelente para entender el concepto! 🎯

Comentarios

Entradas populares de este blog

¿Qué es un Closure?

4 tipos de colecciones de datos más

Funciones en Python: con y sin paréntesis