2014-04-01 161 views
0

原始类节目:类蟒蛇错误

from Circle import circle 
class circle: 
    def __init__(self,radius=1): #write def __init__(self,radius=1) to set a value 
     self.radius=radius 
    # constructer constructs the object and initializes it 

    def getArea(self): 
     return(3.142*self.radius*self.radius) 

    def getPerimeter(self): 
     return(2*3.142*self.myradius) 

使用类:

def main(): 
    c1=circle() 
    #If below happens 
    c1.radius=-1 
    #if above happens then negative value will be returned 
    c2=circle(5) 
    c3=circle(3) 
    print(c1.getArea()) 
    print(c2.getArea()) 
    print(c3.getArea()) 

main() 

我只是想了解如何在Python类。当我运行该程序时,它说

builtins.AttributeError: 'circle' object has no attribute 'getArea' 

我无法理解它为什么会发生。

+7

你确定你的缩进是正确的吗?我在这篇文章中更正了缩进,假设你只是在如何发布时遇到了问题,但可能是'getArea()'方法不被看作'circle'类的一部分。另外,你为什么要导入'Circle.circle'然后用新类覆盖它呢? –

+0

使用'math.pi'而不是自己定义pi。 –

+3

你为什么要导入circle并重新定义它? –

回答

2

什么是这样的:

from math import pi 

class Circle: 
    def __init__(self,radius=1): 
     self.radius=radius 

    def get_area(self): 
     return pi * self.radius**2 

    def get_circumvention(self): 
     return 2 * pi * self.radius 


if __name__ == "__main__": 
    c1=Circle() 
    #If below happens 
    c1.radius=-1 
    #if above happens then negative value will be returned 
    c2=Circle(5) 
    c3=Circle(3) 
    print(c1.get_area()) 
    print(c2.get_area()) 
    print(c3.get_area()) 
    print(c1.get_circumvention()) 
    print(c2.get_circumvention()) 
    print(c3.get_circumvention()) 

您所看到的错误可能是因为你有一个隐藏你的圈子类在上面奇怪的import语句(你试图调用Circle.circle.getArea()不存在)

此外:

  • python coded styles建议的方法和F类名CapsWords和 小写unctions。
  • self.myradius未在__init__中定义,所以getPerimeter将失败。
  • 方法中的括号不是必需的。
  • mathpi
  • 给力记为**(5 ** 2 == 25)
  • 使用if __name__ == "__main__":构建,如果你只想要执行的时候直接运行,而不是进口。
  • 周长 - >规避
  • 使用import声明要使用Circle类另一个 Python文件:from whateveryounamedthisfile import Circle。然后,您可以像使用此文件一样使用Circle
+0

+1实际帮助OP;) –

0

您的进口是毫无意义的。正如评论所述,如果你的话,不要从'圈子'中输入'圈子'。此外,您还没有定义'myradius'属性,因此,除非您更改该属性,否则您的'getPerimeter()'函数将不起作用。