Я относительно новичок в Python и стараюсь примирить функции языка с привычками, которые я выбрал из своего фона на С++ и Java.
Последняя проблема, с которой я столкнулась, связана с инкапсуляцией, в частности, с идеей, которая лучше всего подытожена в пункте 23 Мейера "Эффективный С++":
Предпочитают функции, не являющиеся членами-не-другу, для функций-членов.
Игнорирование отсутствия механизма 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)
, чтобы удвоить величину вектора.
Учитывая тот факт, что в этом случае мы используем свойства, , какой из двух вариантов - если есть - лучше, и почему?