在声明之前引用python中的类

Dak*_*san 5 python django forward-declaration

好的,因此使用Django REST框架教程中的直接示例,我有2个类:UserSerializer和SnippetSerializer。我希望能够在SnippetSerializer类声明中将“ UserSerializer”用作序列化程序,但是由于某些原因,需要首先声明SnippetSerializer。代码示例:

class SnippetSerializer(serializers.HyperlinkedModelSerializer):
    owner = UserSerializer()
    #unimportant stuff

class UserSerializer(serializers.HyperlinkedModelSerializer):
    #unimportant stuff - lets say we reference SnippetSerializer here
Run Code Online (Sandbox Code Playgroud)

我想到的明显答案是前向声明,但是从我的所有研究中,我无法在Python中找到它。

我认为可能可行的另一种解决方案,但没有(也许我做错了吗?),而是尝试在init方法中声明此关系。

class SnippetSerializer(serializers.HyperlinkedModelSerializer):
    def __init__(self, *args, **kwargs):
        self.owner = UserSerializer()
        super(SnippetSerializer, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

但这似乎被框架完全忽略了。

我也尝试使用@addto,但似乎仅适用于函数,不适用于属性/属性

有办法解决这个问题吗?这个“先有鸡”类问题已经在Python中杀死了我一段时间,但是我终于遇到了一个实例,该实例实际上阻止了我完成工作。

小智 -2

这个问题听起来与 StackOverflow 上发布的其他 Django 前向声明问题非常相似。你能使用类似这种方式的前向声明吗?您需要将owner成员包装在 Django 函数调用中,我不知道在这种情况下是否有合适的调用。该解决方案也是 Django 特有的,而不是 Python 的本机功能。