Soy relativamente nuevo en Python y tengo dificultades para conciliar las características del lenguaje con los hábitos que he adquirido de mis antecedentes en C++ y Java.Funciones de miembro no miembro frente a miembro en Python
El último número que estoy teniendo tiene que ver con la encapsulación, en concreto una idea mejor resumen del artículo 23 de Meyer "efectiva C++":
Haciendo caso omiso de la falta de un mecanismo friend
por un momento, se consideran preferible funciones miembro funciones no miembros en Python, también?
Una obligatorio, asnal ejemplo:
class Vector(object):
def __init__(self, dX, dY):
self.dX = dX
self.dY = dY
def __str__(self):
return "->(" + str(self.dX) + ", " + str(self.dY) + ")"
def scale(self, scalar):
self.dX *= scalar
self.dY *= scalar
def scale(vector, scalar):
vector.dX *= scalar
vector.dY *= scalar
Dado v = Vector(10, 20)
, ahora podemos llamar ya sea v.scale(2)
o scale(v, 2)
al doble de la magnitud del vector.
Teniendo en cuenta el hecho de que estamos usando propiedades en este caso, ¿cuál de las dos opciones - si alguna es - es mejor, y por qué?
Creo que esto simplemente no es cierto en Python. Los argumentos realmente no se sientan con Python, donde puedes modificar clases tan fácilmente. Python también se enfoca en la legibilidad, y creo que '' v.scale (2) '' es mucho más claro que '' scale (v, 2) ''. Si busca en la biblioteca estándar, todas las funciones, excepto las más generales, se guardarán como miembros en lugar de integradas. –