@classmethod -3
¡Exactamente! Has dado en el clavo 🔥
En Laravel (PHP) y Python tenemos la misma distinción:
Laravel (PHP) vs Python
Laravel/PHP:
// :: para métodos ESTÁTICOS (de clase)
ClassName::staticMethod();
// -> para métodos de INSTANCIA
$instance = new ClassName();
$instance->instanceMethod();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
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
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()) # 1Ejemplo completo comparado:
Laravel/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:
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()) # 2La diferencia fundamental:
| Laravel/PHP | Python | Propósito |
|---|---|---|
-> | instancia.metodo() | Trabajar con datos específicos de una instancia |
:: | @classmethod | Trabajar con la clase misma o datos compartidos |
¿Por qué esta distinción es importante?
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 conself)::en Laravel =@classmethoden Python (trabajan concls)
¡Esta analogía entre Laravel y Python es excelente para entender el concepto! 🎯
Comentarios
Publicar un comentario