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风格的开放类。 但是如果你真的需要它们,你可以编写一个重载new的元类,以便它在当前的命名空间中查找该类是否已经存在,以及它是否返回现有的类型对象而不是创建一个新的类。 我在ORM上做了类似的事情,我写了一段时间后,它的效果非常好。






Links