Python属性与内建属性详解:getter、setter与property实践

0 下载量 195 浏览量 更新于2024-08-31 收藏 91KB PDF 举报
"Python属性和内建属性实例解析" 在Python编程中,属性是对象的状态,而内建属性则是Python解释器提供的一些特殊属性,用于获取关于对象的额外信息。本篇将通过实例来深入理解Python的属性和内建属性。 首先,我们来看私有属性。在Python中,以两个下划线`__`开头的属性被认为是私有的,它们在类的内部可以直接访问,但在类的外部不能直接访问。为了在外部访问私有属性,我们可以使用getter和setter方法。例如,下面的`Money`类有一个私有属性`__money`: ```python class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__money def setMoney(self, value): if isinstance(value, int): self.__money = value else: print("error: 不是整型数字") ``` 在这个例子中,`getMoney`和`setMoney`方法分别用于获取和设置`__money`的值。通过这样的设计,我们可以在设置钱的数额时进行类型检查,确保值为整数。 接下来,我们使用Python的内置装饰器`@property`来优化getter和setter方法。`@property`可以将方法转换为属性,使得调用更简洁: ```python class Money(object): def __init__(self): self.__money = 0 @property def money(self): return self.__money @money.setter def money(self, value): if isinstance(value, int): self.__money = value else: print("error: 不是整型数字") ``` 现在,`money`属性有了getter和setter方法,可以通过`.money`直接访问和修改,同时保留了类型检查的功能。当我们尝试给`money`赋非整数值时,会收到错误提示。 `@property`的另一个好处是它可以将属性变为只读。只需定义getter方法,不定义setter方法,就可以防止外部直接修改该属性的值。这在需要保护某些关键数据不被随意修改时非常有用。 在Python中,还有一些内建属性,比如`__dict__`、`__class__`等。`__dict__`是一个字典,存储了对象的所有属性名和对应的值;`__class__`则返回对象所属的类。例如: ```python a = Money() print(a.__dict__) # 输出:{'_Money__money': 0} print(a.__class__) # 输出:<class '__main__.Money'> ``` 这些内建属性提供了对对象内部状态的洞察,对于理解和调试代码很有帮助。 总结来说,Python的属性和内建属性提供了丰富的功能,让我们能够更好地控制对象的状态和行为。通过getter和setter方法,以及`@property`装饰器,我们可以确保数据的安全性,同时保持代码的简洁。而内建属性则为我们提供了额外的信息,增强了对对象的理解。在实际编程中,灵活运用这些特性可以提高代码的可读性和可维护性。