我对Python相对较新,并且很难将该语言的特性与我在C ++和Java背景下养成的习惯结合起来。
我目前遇到的问题与封装有关,具体而言是Meyer的“Effective C++”中第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)
来使向量的大小加倍。
考虑到这里我们使用了属性,在这种情况下,这两个选项中的哪一个更好一些(如果有),为什么?