在python中,为什么要使用函数来获取类成员?

2024-04-25 23:00:24 发布

您现在位置:Python中文网/ 问答频道 /正文

你知道吗 嗨,最近我读了一些别人的代码,发现别人和我的不同之处在于他们经常写一个函数来获取类成员。就像 你知道吗

def GetHeight
    return self.height

而不是仅仅使用

self.height

在节目里。你知道吗

你知道吗 我的意思是,在C++中,我知道这是为了得到<强>私有< /强>成员。 在python中,尽管所有内容都设置为public(在正常情况下),
为什么有理由在python中使用它?那只是坏代码吗? 或者我忽略了什么?
我对python有点陌生,如果您能给我一些建议,我将不胜感激。
你知道吗

编辑:
Similar Question看来我的问题被认为是另一个问题的重复。我检查了答案,发现答案更像是一般的建议,而不是pythonic编程。你知道吗

下面的答案介绍了python的一个特性--属性
这可能无法从这个问题中学到,所以我认为我的问题是独一无二的。你知道吗


Tags: 函数答案代码self内容returndef情况
2条回答

在Python中,不需要创建getter方法(特别是如果getter只是返回属性值而没有检查或修改)。您可以实现有意义的get和set方法,但它们实际上应该做些什么。首选方法是使用如下所述的属性装饰器:How does the @property decorator work?

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允许程序员按照自己的意愿使用OO或命令。访问器和变异器的整个概念对于一些人来说是过时的,而被其他人所喜爱。你知道吗

相关问题 更多 >