2015-10-07 41 views
2

我试图教自己如何使用类,我试着在一本书中找到一个示例,要求您创建两个类,然后打印出一些信息。这里是我的代码:无法在Python中调用类

import math 
import turtle 
import urllib.request 


class Shape: 
    def __init__(self,x=0,y=0): 
     self.x = x 
     self.y = y 
    def calc_area(self): 
     pass 
    def calc_perim(self): 
     pass 
    def get_shape_type(self): 
     return "s" 
    def to_string(self): 
     return "%s %f %f" % (self.get_shape_type(), self.x, self.y) 
    def get_draw_params(self): 
     return [self.x, self.y] 

class Circle(Shape): 
    def __init__(self,x=0,y=0,rad=0): 
     super().__init__(x,y) 
     self.radius = rad 
    def calc_area(self): 
     area = math.pi * self.radius * self.radius 
     return area 
    def calc_perim(self): 
     perim = 2 * math.pi * self.radius 
     return perim 
    def calc_circumference(self): 
     return self.calc_perim() 
    def get_shape_type(self): 
     return "c" 
    def to_string(self): 
     return "%s %f %f %f" % (super().to_string(), self.radius, self.calc_area(),self.calc_perim()) 
    def get_draw_params(self): 
     result = super().get_draw_params() 
     result.extend([self.radius]) 
     return result 

cir = Circle(0,0,150) 
print(cir) 

当我尝试运行它,它打印此:

<__main__.Circle object at 0x103d19ef0> 

我不知道我在做什么错了,当我打电话Circle类。我希望在输入init函数要求的值之后,会打印出一些数据。任何帮助将不胜感激。

+0

我没有看到任何错误..你打印出该类的对象表示形式..如果你想看到更多的信息,你需要打印出类似于'print cir。方法' –

回答

2

尝试调用您添加到您的类to_string()方法:

>>> cir = Circle(0,0,150) 
>>> print(cir) 
<__main__.Circle object at 0x7fba2851b400> 
>>> print(cir.to_string()) 
c 0.000000 0.000000 150.000000 70685.834706 942.477796 

如果您想自定义字符串表示,尝试添加__unicode__()和/或__str__()方法,你的类:

现在你可以这样做:

>>> c = Circle(0,0,150) 
>>> print(c) 
c 0.000000 0.000000 150.000000 70685.834706 942.477796 
-1

那么,这是打印它时Circle对象的默认表示形式。

现在你可以调用方法cir,像

print(cir.calc_area()) 
0

没有什么错,你做了什么。一切工作正常。

此:<__main__.Circle object at 0x103d19ef0>

是指示你有你有圆的对象。所以,如果你加上:

print(cir.calc_area()) 

你会最终得到你期望的区域结果。

此外,信息的整齐一点,可以帮助你的是,如果你想了解什么是你对象中的更多信息,你可以这样做:

print(dir(cir)) 

这会告诉你什么是装在你的'cir'对象中,你也会看到你创建的方法也应该在那里。在深入Python时,即使在导入其他模块时也总是很方便地找到可用的东西。

文档上dir

1

它实际上是完全正确的,这是怎么蟒蛇打印你的对象,

如果你想你的打印(对象)的打印别的东西,在你的类定义__str__方法,这样的事情(它应该返回一个字符串):

class Circle(Shape): 
    # your stuff 
    # ... 
    def __str__(self): 
     return "radius: " + self.radius 

cir = Circle(0,0,150) 
print(cir) 
# radius: 150 
+0

这与我的答案基本相同,尽管它不重用现有的'to_string()'方法。 – mhawke