我在一个文件中有一系列Python类.有些类引用其他类.
我的代码是这样的:
class A(): pass class B(): c = C() class C(): pass
试着去试试那个,我明白了NameError: name 'C' is not defined
.很公平,但有没有办法使它工作,或者我是否必须手动重新订购我的课程以适应?在C++中,我可以创建一个类原型.Python有相同的功能吗?
(我实际上正在使用Django模型,但我没有尝试使问题复杂化).
实际上,以上所有都是关于Python的很好的观察,但没有一个能解决你的问题.
Django需要反省内容.
做你想做的事的正确方法如下:
class Car(models.Model): manufacturer = models.ForeignKey('Manufacturer') # ... class Manufacturer(models.Model): # ...
请注意使用类名作为字符串而不是文字类引用.Django提供了这种替代方案来处理Python不提供前向声明的问题.
这个问题让我想起了一个经典的支持问题,你应该总是问任何一个问题的客户:"你真正想做什么?"
在Python中,您本身并不创建原型,但您需要了解"类属性"和实例级属性之间的区别.在上面显示的示例中,您在类B上声明了一个类属性,而不是实例级属性.
这就是你要找的东西:
class B(): def __init__(self): self.c = C()
这将解决您提出的问题(但我认为您真的在寻找一个实例属性,因为jholloway7已回复):
class A: pass class B: pass class C: pass B.c = C()