在Python中避免实现getter函数是一种糟糕的做法吗?

在Python中避免实现getter函数是一种糟糕的做法吗?,python,Python,我正在处理一个Python项目,由于可以通过指定class.variablename直接访问实例变量名,我想知道是否建议为同一个实例实现getter函数。我没有将变量声明为private。在Java等语言中,您可以实现getter和setter,这样,如果您想在获取或设置属性时添加额外的处理(如值验证、访问控制或日志记录),就无需更改类的接口。如果您的类将被未编写的应用程序使用,这一点尤为重要 在Python中,您可以使用@property向属性添加代码,而无需更改接口,因此您应该这样做。使用常

我正在处理一个Python项目,由于可以通过指定class.variablename直接访问实例变量名,我想知道是否建议为同一个实例实现getter函数。我没有将变量声明为private。

在Java等语言中,您可以实现getter和setter,这样,如果您想在获取或设置属性时添加额外的处理(如值验证、访问控制或日志记录),就无需更改类的接口。如果您的类将被未编写的应用程序使用,这一点尤为重要

在Python中,您可以使用
@property
向属性添加代码,而无需更改接口,因此您应该这样做。使用常规属性访问开始,如果需要添加行为,请稍后添加
@property


即使如此,也要使getter和setter函数保持简单。属性访问应该相当快,您应该避免违反该期望。如果你需要做大量的工作来获得一个值,一个方法是合适的,但是给它一个描述性的名称:
calculateFoo()
,而不是
getFoo()

如果你可以做一件更简洁的事情,它可以提高可读性并降低运行时的复杂性,那么你应该做那件事。调用一个getter比在
self.\uu dict\uuuu
中查找花费更多,因此它不仅更难阅读,而且速度也更慢。这似乎是基于观点的(离题)但是我认为实现一个getter作为
属性
,这样您的属性就可以被访问,但不会被篡改是理想的。如果不是公共的,那么变量名就用一个或两个下划线开始。如果需要特殊的getter/setter,请将其创建为private并创建一个getter/setter。@akg否。双下划线表示名称混乱,而不是使变量“private”。Python中没有“private vs public”变量的概念。@Tadhgmandald Jensen我确实认为这跨越了基于观点的界限,但是,
属性
装饰器正是出于这个原因而内置的,因此,它不完全是主观的。