我对 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)
将向量的大小加倍。
考虑到我们在这种情况下使用属性这一事实,这两个选项中的哪一个(如果有的话)更好,为什么?