zoukankan      html  css  js  c++  java
  • 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实用编程技巧进阶

  • 相关阅读:
    Java内存回收机制
    Java并发编程-synchronized指南
    Java Servlet完全教程
    Java线程池的那些事
    Java 代码性能优化总结
    Java开发必会的Linux命令
    Java多线程问题总结
    Redis 学习笔记续
    Redis 学习笔记
    Nginx配置文件详解
  • 原文地址:https://www.cnblogs.com/marton/p/10779100.html
Copyright © 2011-2022 走看看