想知道我是否应该在python中使用属性保释

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.

Tam*_*lei 3

您尝试过静态分析工具吗?这是关于他们的一个很棒的主题。