Python 类定义在与另一个类相同的文件中 - 如何访问文件中稍后定义的类?

Bin*_*oka 2 python django django-models

我对 Python 很陌生,我认为这个问题应该很容易回答。

我的问题简化是这样的......

我在文件类 A 和类 B 中有 2 个类。首先在文件中定义类 A,然后在第二个定义类 B。

class A
    ...

class B
    ...
Run Code Online (Sandbox Code Playgroud)

如何通过 A 类访问 B 类?

class A
    something = B

class B
    somethingElse = A
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试修复的实际代码

class FirstResource(_ModelResource):
    class Meta(_Meta):
        queryset = First.objects.all()
        resource_name = 'first'
        allowed_methods = ['get','put']

        filtering = {
            'a': ALL_WITH_RELATIONS,
            'b': ALL_WITH_RELATIONS,
            'c': ALL_WITH_RELATIONS,
        }

        ordering = ['apt']

    # this is the line that would fix everything
    second = fields.ForeignKey(SecondResource, 'second', null=True, blank=True, default=None, full=True) 

    ...

 class SecondResource(_ModelResource):
    class Meta(_Meta):
        queryset = Second.objects.all()
        resource_name = 'second'
        execute_methods = ['get', 'post']
        filtering = {
            'name': ['exact'],
            'leader': ['exact'],
        }   

    super = fields.ForeignKey(FirstResource, 'super', null=True, blank=True, default=None, full=True)
    leader = fields.ForeignKey(FirstResource, 'leader', null=True, blank=True, default=None, full=True)

    ...
Run Code Online (Sandbox Code Playgroud)

由于没有在 Python 中预先声明,我真的不知道如何解决这个问题。models.py 中的 First 的外键为 Second,而 Second 的外键为 First 的两个。

将 A 移到 B 下方并不能解决问题,因为 B 也需要 A。我没有编写代码,我只是想修复它 - 当我对资源执行“获取”操作时,我需要返回“第二个”外键在两个班级。

Kat*_*iel 5

要访问B,您必须首先定义B.

如果要B定义 时访问A,则需要将其移动A到文件的上方。

如果您想B调用 中的方法 时访问A,则无需执行任何操作:当您调用 中的方法时A,解释器已经执行了所有定义。


Bin*_*oka 5

所以答案是使用 qoutes

B = fields.ForeignKey('api.resources.B', 'B')
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此功能是 Django 特有的,在普通 Python 中不起作用。这是因为 Django 将在“INSTALLED_APPS”中搜索其应用程序以获取正确的包。因此,这个答案并不能解决您提出的简化问题。 (2认同)