python | 面向对象 | 小节案列

# encoding: utf-8

# ************************************************计算器************************************************

class Caculator:

    def __check_num_decorator(func):
        def inner(self, num):
            if not (isinstance(num, int) | isinstance(num, float)):
                raise TypeError("这个数据的类型有问题,应该是一个数值类型")
            return func(self, num)

        return inner

    def create_say_word_decorator(word):
        def say_word_decorator(func):
            def inner(self, num):
                print(word + str(num))
                return func(self, num)

            return inner

        return say_word_decorator

    @__check_num_decorator
    @create_say_word_decorator("first")
    def __init__(self, num):
        self.__result = num

    @__check_num_decorator
    @create_say_word_decorator("add")
    def add(self, num):
        self.__result += num
        return self

    @__check_num_decorator
    @create_say_word_decorator("sub")
    def sub(self, num):
        self.__result -= num
        return self

    @__check_num_decorator
    @create_say_word_decorator("mul")
    def mul(self, num):
        self.__result *= num
        return self

    @__check_num_decorator
    @create_say_word_decorator("div")
    def div(self, num):
        if num == 0:
            raise ZeroDivisionError("不能为0")
        self.__result /= num
        return self

    def get_result(self):
        return self.__result

    result = property(get_result)


c = Caculator(14)
c.add(78).sub(90).mul(90)
print(c.result)
posted @ 2018-04-21 15:04  漫威查尔斯  阅读(95)  评论(0)    收藏  举报