Проблема здесь возникает, когда я пытаюсь включить существующую функцию в класс как функцию-член. У меня есть настройки, подобные этой:
Классы:
base(object)
primitive(base)
square(primitive)
union(primitive)
У меня есть функция с именем union
, которую пользователь вызывает, которая возвращает union
примитивный объект.
obj1 = square()
obj2 = square()
obj3 = union(obj1, obj2) #this is the union function which returns a union primitive
Я хочу, чтобы пользователь тоже мог это сделать
obj3 = obj1.union(obj2)
Вот здесь и возникает проблема. Класс primitive
должен импортировать функцию union
, которая, в свою очередь, импортирует класс union
, который, в свою очередь, импортирует класс primitive
, и я сталкиваюсь с циклической ошибкой зависимости. Есть ли умный способ реорганизовать код или изменить операторы импорта, чтобы это работало?
EDIT:
Для ясности, как структурирован код:
операций / union.py (функция)
from objects import union as _union #the union class
def union(obj1, obj2): #the union function
#CODE
return _union(args)
objects / union.py (класс)
from objects import primitive
class union(primitive):
#CODE
объекты / primitive.py
from operations import union #the function
class primitive(base):
#CODE
def union(self, obj2):
return union(self, obj2)
Существует класс с именем union
, который является объектом, который содержит информацию об объединенных входных объектах. Пользователь не взаимодействует с этим. Затем есть функция union
, которую пользователь может вызвать, которая возвращает объект union
. Я хочу, чтобы класс primitive
содержал функцию-член под названием union
, которая использует функцию union
, которую я уже написал. Проблема в том, что функция union
возвращает объект union
, который наследуется от класса primitive
. Это вызывает проблему круговой зависимости. Я могу удалить функцию-член union
, но тогда пользователь не сможет сделать это
obj3 = obj1.union(obj2)