安迪_963

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

#!/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调用,来实现对  对象属性的 管理

 

posted on 2017-07-01 18:04  Andy_963  阅读(187)  评论(0编辑  收藏  举报