diff --git a/06-vyrazy/objektove.py b/06-vyrazy/objektove.py index 95659f62332984274184fb67935cc6f2fc69bcd3..8418157883e1e960f8d750e3d4803bde42fa625d 100755 --- a/06-vyrazy/objektove.py +++ b/06-vyrazy/objektove.py @@ -18,15 +18,12 @@ class NumNode(Node): return self.value -class BinaryNode(Node): +class AddNode(Node): def __init__(self, left, right): self.left = left self.right = right - -class AddNode(BinaryNode): - def __str__(self): return '(' + str(self.left) + '+' + str(self.right) + ')' @@ -34,7 +31,11 @@ class AddNode(BinaryNode): return self.left.eval() + self.right.eval() -class SubNode(BinaryNode): +class SubNode(Node): + + def __init__(self, left, right): + self.left = left + self.right = right def __str__(self): return '(' + str(self.left) + '-' + str(self.right) + ')' @@ -43,7 +44,11 @@ class SubNode(BinaryNode): return self.left.eval() - self.right.eval() -class MulNode(BinaryNode): +class MulNode(Node): + + def __init__(self, left, right): + self.left = left + self.right = right def __str__(self): return '(' + str(self.left) + '*' + str(self.right) + ')' @@ -52,7 +57,11 @@ class MulNode(BinaryNode): return self.left.eval() * self.right.eval() -class DivNode(BinaryNode): +class DivNode(Node): + + def __init__(self, left, right): + self.left = left + self.right = right def __str__(self): return '(' + str(self.left) + '/' + str(self.right) + ')' diff --git a/06-vyrazy/objektove2.py b/06-vyrazy/objektove2.py new file mode 100755 index 0000000000000000000000000000000000000000..e8622377b00c655e86e7044abd1d525ec0278fc9 --- /dev/null +++ b/06-vyrazy/objektove2.py @@ -0,0 +1,65 @@ +#!/usr/bin/python3 + +class Node: + + def eval(self): + raise NotImplemented() + + +class NumNode(Node): + + def __init__(self, x): + self.value = x + + def __str__(self): + return str(self.value) + + def eval(self): + return self.value + + +class BinaryNode(Node): + + def __init__(self, left, right): + self.left = left + self.right = right + + def __str__(self): + return '(' + str(self.left) + self.op_name + str(self.right) + ')' + + +class AddNode(BinaryNode): + + op_name = '+' + + def eval(self): + return self.left.eval() + self.right.eval() + + +class SubNode(BinaryNode): + + op_name = '-' + + def eval(self): + return self.left.eval() - self.right.eval() + + +class MulNode(BinaryNode): + + op_name = '*' + + def eval(self): + return self.left.eval() * self.right.eval() + + +class DivNode(BinaryNode): + + op_name = '/' + + def eval(self): + return self.left.eval() // self.right.eval() + + +x = AddNode(MulNode(NumNode(3), NumNode(4)), SubNode(NumNode(5), NumNode(6))) +print(x) +print(x.eval())