2015-10-07 42 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