ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

我应该使用属性还是getter和setter方法?

2019-10-26 01:58:19  阅读:196  来源: 互联网

标签:properties python-3-x getter-setter python


我知道在python中使用getter和setters不是pythonic.应该使用属性装饰器.但是我想知道以下情况-

我有一个用一些实例属性初始化的类.然后,稍后我需要向该类添加其他实例属性.如果不使用设置器,则必须在类外的任何地方编写object.attribute = value.该类将没有self.attribute代码.当我需要跟踪类的属性时(因为它们散布在类外部的代码中),这不会成为问题吗?

解决方法:

通常,您甚至都不应该使用属性.简单属性在大多数情况下都可以正常工作:

class X:
    pass
>>> x = X()
>>> x.a
Traceback (most recent call last):
  # ... etc
AttributeError: 'X' object has no attribute 'a'
>>> x.a = 'foo'
>>> x.a
'foo'

只有在访问属性时需要做一些工作时,才应使用属性:

import random

class X:

    @property
    def a(self):
        return random.random()
>>> x = X()
>>> x.a
0.8467160913203089

如果还需要能够分配给属性,则定义一个setter很简单:

class X:

    @property
    def a(self):
        # do something clever
        return self._a

    @a.setter
    def a(self, value):
        # do something even cleverer
        self._a = value
>>> x = X()
>>> x.a
Traceback (most recent call last):
  # ... etc
AttributeError: 'X' object has no attribute '_a'
>>> x.a = 'foo'
>>> x.a
'foo'

请注意,在每种情况下,客户端代码访问属性或属性的方式都是完全相同的.无需为类提供“面向未来的”功能,以免在某些时候您可能想要做的事情比简单的属性访问更为复杂,因此除非您现在确实需要它们,否则没有理由编写属性,getter或setter.

有关特性,getter和setter的惯用Python与其他语言之间的区别的更多信息,请参见:

> Why don’t you want getters and setters?
> Python is not Java(尤其是“字母和字母的设置是邪恶的”部分)

标签:properties,python-3-x,getter-setter,python
来源: https://codeday.me/bug/20191026/1933123.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有