gpt4 book ai didi

Python Setter 和 Getter 命名

转载 作者:行者123 更新时间:2023-12-04 00:59:09 26 4
gpt4 key购买 nike

我试图了解 getter 和 setter 在 python 中如何使用属性工作,但我对命名约定感到困惑。

getter和setter是否有特定的命名标准?为什么我需要用“_”(下划线)设置参数的返回名称?如果我将其更改为“self.color”而不是“self._color”,getter 和 setter 将不再起作用。另外,如果我要更改函数的名称,则不再执行打印函数。任何澄清将不胜感激,谢谢!

class FavoriteColor:
def __init__(self, color):
self.color = color

@property
def color(self):
print('getter method')
return self._color

@color.setter
def color(self, x):
print('setter method')
self._color = x

obj1 = FavoriteColor('blue')

最佳答案

如果你这样做:

@color.setter
def color(self, x):
self.color = x

然后这个setter会反复调用自己。 obj1.color = 'blue'self.color = x 没有区别,他们做的是一样的事情,就是调用setter def color 。因此,随着 setter 递归地调用自身,您将有一个无限的递归循环,最终会使您的程序崩溃。

为此,您需要实际将值存储在其他一些属性上。使用“_color”作为其名称是相当明显的解决方案。

请注意,如果您的 setter/getter 不任何事情,在 Python 中使用这种 setter/getter 是不受欢迎的。您可以完全删除它们并简单地设置 self.color = 'blue' 以获得与您的 setter/getter 对当前具有的效果完全相同的效果。如果他们做了一些额外的处理,你应该只使用 setters/getters。由于普通属性和 setter/getter 的语法相同,如果需要,您甚至可以稍后安全地过渡到使用 setter/getter(与 Java 相比,其中 setter/getter 是 foo .setBar(...),它与 foo.bar = ... 不同,以后不能透明地替换。

关于Python Setter 和 Getter 命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60219862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com