我尝试使用全局变量LAND
,它是类Type
中类Type
的对象。
以下代码给出了一个错误:SyntaxError: invalid syntax
因为LAND
未定义:
# Define a class named Type
class Type():
def __init__(self, id, symbol):
self.id = id
self.symbol = symbol
def is_free(self):
return self.id = LAND.id
# Define variables of this class
LAND = Type(-1, '.')
我无法在LAND
的定义之前移动Type
,因为这也会给我错误SyntaxError: invalid syntax
,因为Type
未定义。< / p>
有人可以告诉我是否有可能吗?或者有没有其他方法可以做到这一点?
我问了一个标题不好的问题Python class forward declaration,它被标记为重复,有两个问题,但正如我在原帖中所解释的那样,我不认为我的问题与那些问题相同二:
我看过帖子Is it possible to forward-declare a function in Python?,但我不认为这是同一个问题。因为问题是关于function
的前瞻声明,而我是在问class
。
我还阅读了这篇文章Does Python have class prototypes (or forward declarations)?,但是它询问了引用另一个类中的类,而我在询问是否在类中引用自己类型的变量。我在这篇文章中没有看到我的解决方案,或者是否有人认为它的重复解释了一点?
答案 0 :(得分:3)
以下代码给出了错误
SyntaxError: invalid syntax
,因为LAND
未定义
不,您收到SyntaxError
,因为作业a = b
(在您的特定情况下为self.id = LAND.id
)不是表达式,这意味着它不会产生值您可以return
。
当您将=
更改为==
时,您的代码可以正常工作,这就是我想要的。或者(我有点不确定你的代码应该发生什么),你可以写两行:
self.id = LAND.id
return self.id
无论如何,这里的问题不是创建LAND
时未定义is_free
。这不是问题,因为还没有人打电话给is_free
。问题是您可能认为(因为您似乎来自C背景),=
的赋值会产生一个值,而Python则不然。