# 使用面向对象的方式,实现计算器的简单功能
# 简单的工厂模式

# 定义一个基类:counter,内含两个特性data1和data2,和一个运算符oper
class COUNTER():

    # 特性:data1
    @property
    def data1(self):
        return self.d1
    @data1.setter
    def data1(self,value):
        self.d1 = value

    # 特性:data2
    @property
    def data2(self):
        return self.d2
    @data2.setter
    def data2(self,value):
        self.d2 = value

# 定义基类的子类:加、减、乘、除
# COUNTERr子类:加法
class COUNTER_ADD(COUNTER):
    def addResult(self):
        return self.data1+self.data2
# COUNTERr子类:减法
class COUNTER_SUBTRACT(COUNTER):
    def subtractResult(self):
        return self.data1-self.data2
# COUNTERr子类:乘法
class COUNTER_MULTI(COUNTER):
    def mutilResult(self):
        return self.data1*self.data2
# COUNTERr子类:除法
class COUNTER_DIVISION(COUNTER):
    def dicisionResult(self):
        if self.data2 == 0:
            return '除数不能为0'
        else:
            return self.data1/self.data2

# 定义子类的子类:OPERATION
# 使用设计模式——简单的工厂模式
class OPERATION(COUNTER_ADD,COUNTER_DIVISION,COUNTER_MULTI,COUNTER_SUBTRACT):
    def __init__(self,oper):
        self.oper = oper
    def result(self):
        if self.oper == "+":
            return self.addResult()
        elif self.oper == "-":
            return self.subtractResult()
        elif self.oper == "*":
            return self.mutilResult()
        elif self.oper == "/":
            return self.dicisionResult()
        else:
            pass

# 测试
if __name__ == '__main__':
    try:
        a = OPERATION('/')
        a.data1 = 1
        a.data2 = 3
        ret = a.result()
        print(ret)
    except Exception :
        print('输入有误。')