Python是否有类原型(或前向声明)?


Answers

其实,以上所有内容都是关于Python的很好的观察,但是它们都不能解决你的问题。

Django需要反思的东西。

做你想做的正确的方法如下:

class Car(models.Model):
    manufacturer = models.ForeignKey('Manufacturer')
    # ...

class Manufacturer(models.Model):
    # ...

请注意使用类名称作为字符串而不是文字类引用。 Django提供了这个替代方案来处理Python不提供前向声明的问题。

这个问题让我想起了一个经典的支持问题,你应该总是问任何客户一个问题:“你到底想做什么?

Question

我在一个文件中有一系列的Python类。 有些类引用其他类。

我的代码是这样的:

class A():
    pass

class B():
    c = C()

class C():
    pass

试图运行,我得到NameError: name 'C' is not defined 。 够公平的,但是有没有办法让它工作,还是我必须手动重新安排我的课程来适应? 在C ++中,我可以创建一个类的原型。 Python有一个相当的?

(我实际上正在玩Django模型,但我试图不复杂的事情)。




Python没有原型或Ruby风格的开放类。 但是如果你真的需要它们,你可以编写一个重载的元类,以便在当前命名空间中进行查找,以查看这个类是否已经存在,以及是否返回现有的类型对象而不是创建新对象。 我在ORM上做了这样的事情,我写了一段时间,它工作得很好。