Python, описать абстрактный класс
Есть вот такое задание, которое нужно реализовать на языке Python. Данное задания есть на других ЯП, но конвертировать у меня не получается.
Задание: Описать абстрактный класс Element (элемент логической схемы) задав в нем символьный идентификатор, количество входов, идентификаторы присоединенных к нему элементов (до 10) и двоичные значения на входах и выходе. На его основе реализовать классы AND_NOT и OR_NOT — двоичные вентили, которые могут иметь различное количество входов и один выход и реализуют логическое умножение c отрицанием и сложение c отрицанием соответственно. Создать класс Sсheme (схема), содержащий массив/параметризованную коллекцию объектов этих классов в динамической памяти. Предусмотреть возможности вывода характеристик объектов списка и вычисление значений, формируемых на выходах схемы по заданным значениям входов. Написать демонстрационную программу, в которой будут использоваться все методы классов.
Тут вроде как получилось реализовать 1 класс:
class Element:
def __init__(self):
self.num_ins = 2
self.__A = False
self.__B = False
self._res = False
if not hasattr(self, "calc"):
raise NotImplementedError("Невозможно создать такой объект!")
def __setIn1(self, newA):
self.__A = newA
self.calc()
def __setIn2(self, newB):
self.__B = newB
self.calc()
def get_a(self):
return self.__A
def get_b(self):
return self.__B
def get_res(self):
return self._res
In1 = property(lambda x: x.__A, __setIn1)
In2 = property(lambda x: x.__B, __setIn2)
Res = property(lambda x: x._res)
class TNot(Element):
def __init__(self):
Element.__init__(self)
def calc(self):
self._res = not self.In1
class TLog2In(Element):
pass
class TAnd(TLog2In):
def __init__(self):
TLog2In.__init__(self)
def calc(self):
self._res = self.In1 and self.In2
class TOr(TLog2In):
def __init__(self):
TLog2In.__init__(self)
def calc(self):
self._res = self.In1 or self.In2
elNot = TNot()
elAnd = TAnd()
elTOr = TOr()
print("A | B | not(A↓B)")
print("---------------")
for A in range(2):
elTOr.In1 = bool(A)
for B in range(2):
elTOr.In2 = bool(B)
elNot.In1 = elTOr.Res
print(" ", A, "|", B, "|", int(elNot.Res))
print()
print("A | B | not(A&B)")
print("---------------")
for A in range(2):
elAnd.In1 = bool(A)
for B in range(2):
elAnd.In2 = bool(B)
elNot.In1 = elAnd.Res
print(" ", A, "|", B, "|", int(elNot.Res))
А как реализовать второй класс, не понимаю.