在Python中,为什么要使用功能获得类成员

In python,why use function to get class member?

本文关键字:功能 成员 Python 为什么      更新时间:2023-10-16

嗨,最近我阅读了其他代码,发现他人和我之间的差异是他们经常写一个函数来获得班级成员。喜欢

def GetHeight
    return self.height

而不仅仅是使用

self.height

在程序中。

我的意思是,在C 中,我知道这是获得私有成员的功能。
在Python中,尽管所有内容都设置为 public (在正常情况下),
为什么它有理由在Python中使用?那只是不良代码吗?还是我忽略的其他东西?
我对Python有点新手,所以如果您提供一些建议,我会很感激。

编辑:
类似的问题似乎我的问题被确定为另一个问题的副本。我检查了答案,发现答案更像是一般建议,而不是Pythonic编程。

下面的答案引入了Python的功能 - 属性
这可能无法从这个问题中学到,所以这就是我认为我的问题是独一无二的原因。

在python中,不需要创建一个getter方法(尤其是如果Getter只是简单地返回属性值而无需任何检查或修改)。您可以实现有意义的获取方法,但实际上应该做点什么。首选的方法是使用此处描述的属性装饰器:@property Decorator如何工作?

class Building(object):
    def __init__(self):
        self._height = 100
    @property
    def height(self):
        return self._height
    @height.setter
    def height(self, value):
        if 0 < value < 1000:
            self._height = value
        else:
            raise ValueError('Attribute: height must be between 0 and 1000.')

然后,从读取或分配给属性时使用属性方法:

b = Building()
print(b.height)
100
b.height = 90
print(b.height)
90
b.height = 2000
print(b.height)
90

按照惯例,保留属性之前是单个下划线和私人属性,由双重下划线。但是,这更多的是提醒班级用户应注意该属性,并且没有任何阻止他们访问属性的属性。

这是一个偏爱问题。python让程序员成为诉讼或命令。饰物和突变器的整个概念是老式的,并且被其他人钟爱。