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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python_如何创建可管理的对象属性相关的知识,希望对你有一定的参考价值。

案例:

       在面向对象编程中,我们把方法作为对象的接口,自己访问对象的属性可能是不安全的,或设计上不灵活,但是使用调用方法在形式上不如访问属性简洁

       繁:

              circle.getRadius()

              circle.setRadius(5.0)

#!/usr/bin/python3

from math import pi


class Circle():
    def __init__(self, radius):
        self.radius = radius
        
    # 获取半径接口
    def get_radius(self):
        return self.radius

    # 设置半径接口
    def set_radius(self, value):
        if isinstance(value, (int, float)):
            self.radius = float(value)
        else:
            raise ValueError(‘wrong type‘)
    
    # 获取面积接口
    def get_area(self):
        return round(self.radius ** 2 * pi, 2)

if __name__ == ‘__main__‘:
    c = Circle(3.0)
    print(c.get_area())
    
    # 设置半径
    c.set_radius(5.0)
    print(c.get_radius(), c.get_area())

 

       简:

              circle.radius

              circle.radius = 5.0

       第二种方式看起来更加舒服简洁,如何实现?

如何实现?

  1. 通过类装饰器property,把类方法,变成类似属性一样
    # !/usr/bin/python3
    
    from math import pi
    
    
    class Circle():
        def __init__(self, radius):
            self.radius = radius
    
        # 获取半径
        @property
        def get_radius(self):
            return self.radius
    
        # 获取面积
        @property
        def get_area(self):
            return round(self.radius ** 2 * pi, 2)
    
        # 设置半径值,指明为get_area函数设置值,但是给哪个函数设置值无关紧要,只要是类属性,其他函数都可以访问
        @get_area.setter
        def set_radius(self, value):
            if isinstance(value, (int, float)):
                self.radius = float(value)
            else:
                raise ValueError(‘wrong type‘)
    
    
    if __name__ == ‘__main__‘:
        c = Circle(3.0)
        print(c.get_area)
    
        c.set_radius = 5.0
        print(c.get_radius, c.get_area)
    

      

  2. 通过内置property方法
    # !/usr/bin/python3
    
    from math import pi
    
    
    class Circle():
        def __init__(self, radius):
            self.radius = radius
    
        # 获取半径
        def get_radius(self):
            return self.radius
    
        # 获取面积
        def get_area(self):
            return round(self.radius ** 2 * pi, 2)
    
        # 设置半径值,
        def set_radius(self, value):
            if isinstance(value, (int, float)):
                self.radius = float(value)
            else:
                raise ValueError(‘wrong type‘)
    
        # obj.R 调用第一个函数,obj = 5.0 调用第二个函数,进行设置值,没有@property灵活
        R = property(get_radius, set_radius)
    
    
    if __name__ == ‘__main__‘:
        c = Circle(3.0)
        print(c.get_area())
    
        c.R = 5.0
        print(c.R)
        print(c.R, c.get_area())

以上是关于python_如何创建可管理的对象属性的主要内容,如果未能解决你的问题,请参考以下文章

python-类与对象 如何创建可管理的对象属性 (图文并茂)

python-类与对象 如何创建可管理的对象属性 (图文并茂)

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

python之路之前没搞明白4面向对象(封装)

创建可管理的对象属性

创建可管理的对象属性