【问题标题】:How can i forward declare a class argument in python?如何在 python 中转发声明类参数?
【发布时间】:2019-05-22 15:53:36
【问题描述】:

在声明Django模型时,遇到了这个问题:

class Foo(Bar):
    pass

class Bar():
    pass

NameError: 名称 'Bar' 未定义

如何在 python 3.6.7 中转发声明类参数?

【问题讨论】:

  • 你不能。你为什么想要?只需交换订单即可。
  • 先有什么,先有鸡还是先...
  • 请注意,有一种非常特殊的情况,您可以使用尚未定义的名称,即in type annotations。但即使这样也需要 3.7+ 和 from __future__ import annotations 导入才能工作,而且根本不适用于这种情况。重新排列你的定义。
  • @Peritosh 这是一个问答网站。还有很多其他的编程语言接受切换声明的顺序,如果你只限于 python,你可以回答“先来的,先有鸡还是......”。
  • @Daniel 我有大量的类,我有一些 porpuses 以非声明顺序、分组编写它们,以提高可读性。这就是为什么我不只是交换订单,但我想我必须这样做。

标签: python django python-3.x django-models


【解决方案1】:

你有NameError,因为 python 顺序读取类。 (类的顺序很重要)。

class Bar:
    pass

class Foo(Bar): 
    ''' Bar is not "class argument". Bar is Super Class(Parent Class) of Foo. '''

不再有NameError

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2012-11-30
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多