我已经在这段示例代码上工作了一段时间,似乎无法绕过这个看似简单的错误。
代码如下:
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.
答案 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