如何解决Python中装饰器中的循环引用

问题描述 投票:0回答:1

我目前正在为类实现装饰器,其中包含其与其他类关系的元数据。然而,在某些情况下,存在循环引用,虽然这不会导致类本身出现问题,但会在包含引用的装饰器中引发 NameError。

def foo(bar):
    def decorator_foo(func):
        return func
    return decorator_foo

@foo(bar=B)
class A:
    pass

@foo(bar=A)
class B:
    pass

上面的示例显示了引发错误的简单方法。有没有一个干净的方法来解决这个问题?谢谢!

python python-3.x python-decorators
1个回答
1
投票

装饰器只是简单的函数,因此在这种情况下,您可以在定义类后调用它们:

def foo(bar):
    def decorator_foo(func):
        return func

    return decorator_foo


class A:
    pass


class B:
    pass


A = foo(bar=B)
B = foo(bar=A)
© www.soinside.com 2019 - 2024. All rights reserved.