你在Python中使用get/set模式吗?

88 投票
8 回答
102479 浏览
提问于 2025-04-15 21:15

在Java中,使用get和set方法是一种很常见的做法(有很多原因),但我几乎没看到Python代码使用这些方法。

你为什么在Python中使用或避免使用get/set方法呢?

8 个回答

32

这是Guido van Rossum在编程大师中提到的内容。

你说的“与语言作斗争”是什么意思?

Guido: 这通常是指他们试图继续使用在其他语言中有效的习惯。

[...] 有些人会把所有东西都变成类,把每次访问都变成访问方法,
但在Python中这样做其实并不明智;这样会让代码变得冗长,
更难调试,而且运行速度也会变慢。你知道那句“你可以用任何语言写FORTRAN”吗?其实你也可以用任何语言写Java。

118

在Python中,你可以直接访问属性,因为它是公开的:

class MyClass:

    def __init__(self):
        self.my_attribute = 0  

my_object = MyClass()
my_object.my_attribute = 1 # etc.

如果你想在访问或修改这个属性时做一些事情,可以使用属性(properties)

class MyClass:

    def __init__(self):
        self._my_attribute = 0

    @property
    def my_attribute(self):
        # Do something if you want
        return self._my_attribute

    @my_attribute.setter
    def my_attribute(self, value):
        # Do something if you want
        self._my_attribute = value

最重要的是,使用这些方法的代码保持不变。

60

很酷的链接:Python 不是 Java :)

在 Java 里,你必须使用“获取器”和“设置器”,因为如果你直接用公共字段,就没法后悔了,不能再改成使用“获取器”和“设置器”。所以在 Java 中,最好一开始就把这件麻烦事处理好。而在 Python 中,这样做就显得很傻,因为你可以先用普通的属性,随时都可以改变主意,而不会影响到使用这个类的其他地方。所以,不要写“获取器”和“设置器”。

撰写回答