在Python中,为什么要使用功能获得类成员
In python,why use function to get class member?
嗨,最近我阅读了其他代码,发现他人和我之间的差异是他们经常写一个函数来获得班级成员。喜欢
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让程序员成为诉讼或命令。饰物和突变器的整个概念是老式的,并且被其他人钟爱。
相关文章:
- 类模板的成员功能的定义在单独的TU中完全专业化
- 升压信号2将插槽传递到成员功能以断开连接
- 多次实现成员功能
- 如何定义可变参数类模板的成员模板功能
- 私有成员数据不可用于公共成员功能
- 好友功能 - 成员无法访问
- 如何启用友元类的友元功能直接在C++中访问其私有成员
- 无法从好友功能访问类的私有成员?"ostream"不是"std"的成员?
- C++从成员类型中扣除类型的功能模板?
- 如何避免大多数成员功能相同的代码重复
- 无法访问公共功能? 没有指定成员?
- C 成员功能
- =删除用户定义的成员功能,除了构造函数,分配运算符C 11
- C 朋友课程和朋友成员功能
- C 函数调用包装器包含类成员功能作为模板参数
- 共享库中静态功能成员的破坏顺序
- 可以使用仅功能成员属性进行回调界面
- 虚拟方法与std ::功能成员变量在性能方面
- 虚拟继承和功能成员
- 指向功能成员和非成员的指针