Объект: узел, который имеет значение и необязательную ссылку на другой узел. Классы, которые наследуются от Узла, могут иметь более сложные ссылки на другие Узлы, и обработка циклических ссылок окажется жизненно важной для моего личного использования в дальнейшем.
Для этого вопроса я покажу упрощенную версию кода, которая просто проверяет, достигает ли он исходного объекта (с закомментированной желаемой проверкой):
class Node:
'''A basic node for dependency mapping. Bundles another type with a reference.'''
def __init__(self, val = None, ref = None):
self.ref = ref
self.val = val
def __getattribute__(self, name, source = None):
#While iterating through multiple nodes, throws
#an error if the original node is reached.
#if self in source:
if self is source:
raise AttributeError("Circular dependency detected in getattr()")
elif name == "ref":
#Somehow pass the source node into the next node's getattr() call.
else:
return object.__getattribute__(self, name)
Теоретически, если элифовая часть getattribute могла бы работать, я мог бы обрабатывать повышенное исключение в каждом конкретном случае. в зависимости от функции, и не нужно кодировать проверки во многих местах.
Возможно ли передать дополнительные параметры встроенным функциям в Python? И есть ли лучшие способы закодировать выдаваемую ошибку?