From 310babe81756eb771b0f1111601de4972c4989c5 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Wed, 8 Apr 2020 09:52:06 +0200
Subject: [PATCH] =?UTF-8?q?V=C3=BDrazy:=20Dv=C4=9B=20objektov=C3=A9=20verz?=
 =?UTF-8?q?e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 06-vyrazy/objektove.py  | 23 ++++++++++-----
 06-vyrazy/objektove2.py | 65 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+), 7 deletions(-)
 create mode 100755 06-vyrazy/objektove2.py

diff --git a/06-vyrazy/objektove.py b/06-vyrazy/objektove.py
index 95659f6..8418157 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 0000000..e862237
--- /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())
-- 
GitLab