无法在Python中调用类

时间:2015-10-07 03:10:19

标签: python class

我正在尝试自学如何使用类,我正在尝试一个我在一本书中找到的例子,要求你创建两个类然后打印出一些信息。这是我的代码:

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函数要求的值之后,会有一些数据要打印出来。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分: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__()方法:

def __str__(self):
    return self.to_string()

现在你可以这样做:

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

答案 1 :(得分:1)

实际上非常正确,这就是python打印对象的方式,

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

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

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

答案 2 :(得分:0)

你所做的一切都没有错。一切都很好。

这:<__main__.Circle object at 0x103d19ef0>

表示您拥有Circle的对象。所以,如果你添加这个:

print(cir.calc_area())

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

此外,一些可以帮助您的信息是,如果您想了解有关物体内部物体的更多信息,可以这样做:

print(dir(cir))

这将告诉您'cir'对象内部的内容,您还会看到您创建的方法也应该存在。即使在深入了解Python时导入其他模块,也总是很方便找出可用的内容。

dir

上的文档

答案 3 :(得分:-1)

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

现在您可以调用cir的方法,例如

print(cir.calc_area())