Ben*_*Ben 11 python getter setter properties
我一直在尝试在我的应用中使用属性而不是特定的setter和getter.它们似乎更加pythonic,通常使我的代码更具可读性.
除一个问题外更具可读性:错别字.
考虑以下简单示例(注意,我的属性实际上做了一些处理,即使这里的示例只是设置或返回一个简单的变量)
class GotNoClass(object):
def __init__(self):
object.__init__(self)
self.__a = None
def __set_a(self, a):
self.__a = a
def __get_a(self):
return self.__a
paramName = property(__get_a, __set_a)
if __name__ == "__main__":
classy = GotNoClass()
classy.paramName = 100
print classy.paramName
classy.paranName = 200
print classy.paramName
#oops! Typo above! as seen by this line:
print classy.paranName
Run Code Online (Sandbox Code Playgroud)
任何仔细阅读的人都会看到输出结果是:
100
100
200
Run Code Online (Sandbox Code Playgroud)
哎呀.不应该是因为我做了一个错字 - 我写了paranName(两个n)而不是paramName.
在这个简单的例子中,这很容易调试,但在我的大项目中它一直在伤害我.因为当我意外地使用属性时,python愉快地创建了一个新变量,所以我的代码中出现了细微的错误.我发现有时难以追查的错误.更糟糕的是,我曾经两次使用相同的拼写错误(一次是我设置的,后来一次就像我一样)所以我的代码似乎工作但很久以后,当一个不同的代码分支最终试图访问这个属性(正确)我得到了错误的价值 - 但我花了好几天才意识到我的结果有点偏差.
现在我知道这是一个问题,我花了更多的时间仔细阅读我的代码,但理想情况下我会有办法自动捕捉这种情况 - 如果我只想念一个我可以引入一个错误,直到相当一段时间过去了......
所以我想知道,我应该转而选择使用优质的老牌手机和吸气剂吗?还是有一些巧妙的方法来避免这种情况?人们只是依靠自己手动捕获这些错误吗?唉,我不是一个专业的程序员,只是有人试图在工作中完成一些工作,我真的不知道解决这个问题的最佳方法.
谢谢.
PS我明白这也是Python的好处之一,我并不抱怨.只是想知道我是否会更好地使用显式设置器和getter.