Python中文
首页
教程
问答
标签
搜索
登录
注册
不知道我是否应该在python中使用属性
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我一直在尝试在我的应用程序中使用属性而不是特定的setter和getter。它们看起来更像Python,而且通常使我的代码更具可读性。在</p> <p>除了一个问题:打字错误外,可读性更强。在</p> <p>考虑下面这个简单的例子(注意,我的属性实际上做了一些处理,尽管这里的示例只是设置或返回一个简单的变量)</p> <pre><code>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 </code></pre> <p>任何仔细阅读的人都会发现,结果是:</p> ^{pr2}$ <p>哦。不应该,除非我犯了个错误-我写了paranName(两个n)而不是paramName。在</p> <p>在这个简单的例子中,这很容易调试,但在我更大的项目中它一直在伤害我。由于python很乐意在我无意中使用属性时创建了一个新变量,所以我的代码中会出现一些细微的错误。有时我发现很难找到的错误。更糟糕的是,我曾经用过两次同样的错别字(一次是我设置的,后来一次是我得到的),所以我的代码似乎可以正常工作,但是很久以后,当一个不同的代码分支最终尝试(正确地)访问这个属性时,我得到了一个错误的值-但是我花了几天时间才意识到我的结果有点偏差。在</p> <p>现在我知道这是一个问题,我花了更多的时间仔细阅读我的代码,但理想情况下,我会有一种方法自动捕捉这种情况-如果我错过了一个,我可以引入一个错误,直到一段相当长的时间过去后才会出现。。。在</p> <p>所以我想知道,我是不是应该改用好的旧的setter和getter?或者有什么好办法可以避免这种情况?人们仅仅依靠自己手动捕捉这些错误吗?唉,我不是一个专业的程序员,只是一个想在工作中完成一些事情的人,我真的不知道最好的方法。在</p> <p>谢谢。在</p> <p>p.S。 我知道这也是Python的一个优点,我对此并不抱怨。只是想知道使用显式setter和getter是否更好。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>你试过静态分析工具吗?<a href="https://stackoverflow.com/questions/35470/are-there-any-static-analysis-tools-for-python">Here is a great thread about them.</a></p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
3 回答
无法使用Django\u mssql\u后端迁移到外部hos
1 回答
无法使用Django&Python3.4连接到MySql
6 回答
无法使用Django+nginx上载媒体文件
2 回答
无法使用Django1.6导入名称模式
4 回答
无法使用Django1.7和mongodb登录管理站点
6 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
7 回答
无法使用Djangockedi验证CBV中的字段
3 回答
无法使用Djangocketditor上载图像(错误400)
10 回答
无法使用Djangocron进行函数调用
1 回答
无法使用Djangofiler djang上载文件
7 回答
无法使用Djangokronos
6 回答
无法使用Djangomssql provid
3 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
1 回答
无法使用Djangomssq迁移Django数据库
8 回答
无法使用Djangonox创建用户
4 回答
无法使用Djangopyodb从Django查询SQL Server
1 回答
无法使用Djangopython3ldap连接到ldap
6 回答
无法使用Djangoredis连接到redis
9 回答
无法使用Django中的FK创建新表
8 回答