Я относительно новичок в Python и изо всех сил пытаюсь совместить особенности языка с привычками, которые я усвоил из своего опыта работы с C++ и Java.
Последняя проблема, с которой я столкнулся, связана с инкапсуляцией, в частности с идеей, которую лучше всего резюмирует пункт 23 книги Мейера «Эффективный C++ »:
Предпочитать не-член не-дружественные функции к функциям-членам .
Не обращая внимания на отсутствие friend
механизма, не-функции-члены также считаются предпочтительнее функций-членов в Python ?
Обязательный глупый пример.:
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
Имея v = Vector(10, 20)
, мы можем вызвать либо v.scale(2)
, либо scale(v, 2)
, чтобы удвоить величину вектора.
Принимая во внимание тот факт, что в данном случае мы используем свойства, какой из двух вариантов-лучше-и почему?