Python错误:未定义全局名称

2024-09-27 09:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在努力自学Python,并且大部分时间都做得很好。但是,当我试图运行代码时

class Equilateral(object):
    angle = 60
    def __init__(self):
        self.angle1, self.angle2, self.angle3 = angle

tri = Equilateral()

我得到以下错误:

Traceback (most recent call last):
  File "python", line 15, in <module>
  File "python", line 13, in __init__
NameError: global name 'angle' is not defined

可能有一个非常简单的答案,但为什么会发生这种情况呢?


Tags: 代码inselfobjectinitdefline时间
3条回答

当a,b,c=d无效时,a=b=c=d工作正常。

您需要在这里使用self.angle,因为类本身就是名称空间,要访问类内的属性,我们使用self.attr语法,或者您也可以在这里使用Equilateral.angle,因为angle也是一个类变量。

self.angle1, self.angle2, self.angle3 = self.angle

这仍然是错误的,因为你不能给三个变量分配一个值:

self.angle1, self.angle2, self.angle3 = [self.angle]*3

示例:

In [18]: x,y,z=1  #your version
---------------------------------------------------------------------------

TypeError: 'int' object is not iterable

#some correct ways:

In [21]: x,y,z=1,1,1  #correct because number of values on both sides are equal

In [22]: x,y,z=[1,1,1]  # in case of an iterable it's length must be equal 
                        # to the number elements on LHS

In [23]: x,y,z=[1]*3
self.angle1, self.angle2, self.angle3 = angle

应该是

self.angle1 = self.angle2 = self.angle3 = self.angle

只要说angle,python就会寻找一个不存在的全局angle变量。您必须通过self变量引用它,或者由于它是类级变量,您还可以说Equilateral.angle

另一个问题是逗号分隔的self.angleNs。当您以这种方式赋值时,python将在等号的两边查找相同数量的部分。例如:

a, b, c = 1, 2, 3

相关问题 更多 >

    热门问题