python类与对象-如何创建可管理的对象属性

如何创建可管理的对象属性

问题举例

在面向对象编程中, 我们把方法看作对象的接口,

直接访问对象的属性可能是不安全的,或设计上不够灵活。

但是使用调用方法在形式上不如访问属性简洁。

circle.get_radius()

circle.set_radius(5.0)  #繁琐

circle.radius

circle.radius = 5.0    #简洁

能否在形式上是属性访问,但实际上是内部调用方法?

解决思路

使用property函数为类创建可管理属性,fget/fset/fdel对应相应属性访问。

代码

import math

class Circle:
    def __init__(self, radius):
        self.radius = radius

    def get_radius(self):
        return round(self.radius, 1)

    def set_radius(self, radius):
        if not isinstance(radius, (int, float)):
            raise TypeError('wronge type')
        self.radius = radius

    @property
    def S(self):
        return self.radius ** 2 * math.pi

    @S.setter
    def S(self, s):
        self.radius = math.sqrt(s / math.pi)

    R = property(get_radius, set_radius)

c = Circle(5.712)

c.S = 99.88
print(c.S)
print(c.R)

#print(c.get_radius())
#c.radius = '31.98

参考资料:python3实用编程技巧进阶

原文地址:https://www.cnblogs.com/marton/p/10779100.html