Возможна ли эта умная бесконечная техника рекурсии внутри объекта? - PullRequest
0 голосов
/ 20 марта 2020

Объект: узел, который имеет значение и необязательную ссылку на другой узел. Классы, которые наследуются от Узла, могут иметь более сложные ссылки на другие Узлы, и обработка циклических ссылок окажется жизненно важной для моего личного использования в дальнейшем.

Для этого вопроса я покажу упрощенную версию кода, которая просто проверяет, достигает ли он исходного объекта (с закомментированной желаемой проверкой):

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? И есть ли лучшие способы закодировать выдаваемую ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...