2

我最近做了很多 Python 类,我通常只访问这样的实例变量:

object.variable_name

但我经常看到来自其他模块的对象会使用包装器方法来访问如下变量:

object.getVariable()

这些不同方法的优点/缺点是什么?是否有普遍接受的最佳实践(即使有例外)?

4

3 回答 3

11

在 Python 中永远不需要使用方法调用来获取属性。写这篇文章的人可能是前 Java 程序员,这是惯用的。

在 Python 中,直接访问属性被认为是合适的。如果您在访问属性时需要运行一些代码,例如动态计算它,您应该使用@property装饰器。

于 2012-08-02T09:45:50.063 回答
3

在我看来,“getter”(getVariable表单)的主要优点是在不更改签名的情况下添加功能或改进对象要容易得多。

例如,假设我的对象从实现某些功能变为封装另一个对象并通过代理模式(组合)提供相同的功能。如果我使用 getter 来访问属性,那么从哪里获取该属性并不重要,并且使用您的代码的“客户”看不到任何变化。

我使用 getter 和此类方法,尤其是当我的代码被其他人重用(例如作为库)时。当我的代码是独立的时,我就不那么挑剔了。

在 Java 中,这几乎是一项要求,您永远不应该直接访问您的对象字段。在 Python 中这样做是完全合法的,但您可能会考虑到我提到的封装可能带来的好处。仍然请记住,相反,直接访问在 Python中并不被认为是不好的形式。

于 2012-08-02T09:46:41.260 回答
0

制作 getVariable() 和 setVariable() 方法称为封装。这种做法有很多优点,它是面向对象编程中的首选风格。

通过通过方法访问变量,您可以添加另一层“错误检查/处理”,确保您尝试设置/获取的值是正确的。

setter 方法还用于其他任务,例如通知侦听器变量已更改。

至少在 java/c#/c++ 等中。

于 2012-08-02T09:46:09.190 回答