python set和get实现

import math


class Square:  # 正方形

    def __init__(self, l):
        self.length = l  # 边长

    def __setattr__(self, key, value):
        s = "调用__setattr__, key={}, value={}".format(
            key, value)
        print(s)

        if key == "length" and value > 0:
            self.__dict__["length"] = value
            self.__dict__["perimeter"] = value * 4
            self.__dict__["area"] = value ** 2

        if key == "perimeter" and value > 0:
            self.__dict__["length"] = value / 4
            self.__dict__["perimeter"] = value
            self.__dict__["area"] = (value / 4) ** 2

        if key == "area" and value > 0:
            self.__dict__["length"] = math.sqrt(value)
            self.__dict__["perimeter"] = math.sqrt(value) * 4
            self.__dict__["area"] = value


sq = Square(10)
print("length =", sq.length)
print("perimeter =", sq.perimeter)
print("area =", sq.area)
print("-------")

sq.perimeter = 12
print("length =", sq.length)
print("perimeter =", sq.perimeter)
print("area =", sq.area)
print("########")

sq.area = 25
print("length =", sq.length)
print("perimeter =", sq.perimeter)
print("area =", sq.area)

# 执行结果
调用__setattr__, key=length, value=10
length = 10
perimeter = 40
area = 100
-------
调用__setattr__, key=perimeter, value=12
length = 3.0
perimeter = 12
area = 9.0
########
调用__setattr__, key=area, value=25
length = 5.0
perimeter = 20.0
area = 25

 

posted @ 2017-10-29 23:09  智能先行者  阅读(3763)  评论(0编辑  收藏  举报