Ошибка имени: глобальное имя 'r' не определено - PullRequest
0 голосов
/ 23 июня 2018

Я некоторое время работал над этим примером кода и, похоже, не могу обернуться вокруг этой, казалось бы, простой ошибки.

Код выглядит следующим образом:

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 голосов
/ 23 июня 2018

Вам нужно использовать 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
0 голосов
/ 23 июня 2018

Вам, вероятно, нужно изменить ваш метод 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
...