Sono relativamente nuovo a Python e non riesco a riconciliare le funzionalità del linguaggio con le abitudini che ho acquisito dal mio background in C++ e Java.Funzioni membro non membro vs Python
L'ultimo numero che sto avendo ha a che fare con l'incapsulamento, in particolare un'idea riassunto al meglio da Articolo 23 del Meyer "Effective C++":
Ignorando la mancanza di un meccanismo friend
per un istante, sono funzioni terzi ritenuto preferibile funzioni membro in Python, troppo?
Un obbligatoria, ad esempio asinino:
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
Dato v = Vector(10, 20)
, ora possiamo chiamare sia v.scale(2)
o scale(v, 2)
di raddoppiare la grandezza del vettore.
Considerando il fatto che stiamo usando le proprietà in questo caso, quale delle due opzioni - se c'è - è meglio, e perché?
Ritengo che questo semplicemente non sia vero in Python. Gli argomenti non si trovano in realtà con Python, dove è possibile modificare le classi così facilmente. Python si concentra anche sulla leggibilità, e sento che '' v.scale (2) '' è molto più chiaro di '' scale (v, 2) ''. Se si guarda nella libreria standard, tutte le funzioni più generali vengono mantenute come membri anziché come builtin. –