名称错误:未定义全局名称“ r”

时间:2018-06-23 10:58:10

标签: python nameerror

我已经在这段示例代码上工作了一段时间,似乎无法绕过这个看似简单的错误。

代码如下:

class area :

    r=5
    l=2
    b=3

    def __init__(self,r,l,b):
        print "parent constructor"
        self.r=r
        self.l=l
        self.b=b

    def __del__(self):
        print "parent deconstructor"

    def circle(self):

        circle_area= 3.14 * r * r
        print "area of circle is :",circle_area 

    def rectangle(self):
        rect_area=l*b
        print "area of rectangle :",rect_area

obj=area(4,5,4)
obj2=area(2,5,4)

obj.circle()

错误消息显示:

File "yaa.py", line 18, in circle
    circle_area= 3.14 * r * r
NameError: global name 'r' is not defined. 

2 个答案:

答案 0 :(得分:3)

您需要使用self来引用类属性:

def circle(self):
    circle_area= 3.14 * self.r * self.r
    print "area of circle is :",circle_area 

如果要在类中使用r,而不是实例,则必须使用类名:

def circle(self):
    circle_area= 3.14 * area.r * area.r
    print "area of circle is :",circle_area

答案 1 :(得分:1)

您可能需要从以下方式更改方法circle(self)

circle_area= 3.14 * r * r

circle_area= 3.14 * self.r * self.r

因为r是类的属性,而不是全局变量。


方法rectangle(self)也是如此:

rect_area = self.l * self.b