zoukankan      html  css  js  c++  java
  • 创建可管理的对象属性

    下面先创建一个计算面积的类:

    #!/usr/bin/env python
    #coding:utf-8
    #Created by Andy @ 2017/7/1
    
    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 not isinstance(value, (int, float)):
                raise ValueError("Wrong type!")
            self.radius = float(value)
    
        def get_area(self):
            return self.radius ** 2 * pi
    

    这样,如果我需要得到某个实例的半径,或者面积,需要这样做:

    c = Circle(3)
    print(c.get_radius())
    

     但是,有没有更简单的办法呢?

    #!/usr/bin/env python
    #coding:utf-8
    #Created by Andy @ 2017/7/1
    
    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 not isinstance(value, (int, float)):
                raise ValueError("Wrong type!")
            self.radius = float(value)
    
        def get_area(self):
            return self.radius ** 2 * pi
    
        r = property(get_radius, set_radius)
    
    c = Circle(3)
    print(c.r)
    c.r = 5
    print(c.r, c.get_radius())
    

     当然这里property 可以分别设置:

    fget
    fset
    fdel
    

     这里只需要设置前面的get, 及set方法,所以只写了前两个。

    可以看到,经过property的使用,我们可能直接通过对r调用,来实现对  对象属性的 管理

  • 相关阅读:
    hadoop机架感知
    Ajax请求结果的缓存
    Blocks语法
    CentOS yum 源的配置与使用
    .NET三层架构开发初步
    Mac技巧合集第一期
    Fine Uploader文件上传组件
    WCF 系列文章
    http权威指南读书笔记
    WCF Service Hosting的线程关联性Mono实现比.NET统一?
  • 原文地址:https://www.cnblogs.com/Andy963/p/7103034.html
Copyright © 2011-2022 走看看