Python ::初始化一个对象

时间:2013-12-09 08:54:00

标签: python formatting

我正在设计Python的面向对象功能。到目前为止,我只使用NumPy和SciPy而不是纯Python本身。我写了这段小代码:

class Point(object):

    def __init__(self, x = 0.0, y = 0.0):
        self.x = x
        self.y = y

    def __str__(self):
        return '%.2d , %.2d' % (self.x, self.y)

    def print_point(self):
        print('%.1d , %1.d' % (self.x,self.y))

a = Point()
b = Point(1.2,4.5)

print(a)
print(b)

现在输出是:

00 , 00
01 , 04

这对我来说似乎是一个经典的格式错误,因为输出应该是(0.0,0.0)和(1.2,4.5)。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

只需将 str 更改为:
def __str__(self): return '%.2f , %.2f' % (self.x, self.y)
记住:%d打印一个整数,%f打印一个浮点值。

答案 1 :(得分:2)

%d格式化为整数。您想要%f - 请参阅此处docs.python.org

但这是旧式的。

def __str__(self):
    return "{:.2f} , {:.2f}".format(self.x,self,y) 

将是现代方法。

答案 2 :(得分:2)

您需要将其从"%.2d"更改为"%.2f"。虽然我建议您使用格式而不是旧式格式。

class Point(object):
    def __init__(self, x=0.0, y=0.0):
        self.x = x
        self.y = y

    def __str__(self):
        return '{0:.2f}, {1:.2f}'.format(self.x, self.y)

    def print_point(self):
        print('%.1d , %1.d' % (self.x, self.y))


a = Point()
b = Point(1.2, 4.5)

print(a)
print(b)

给你:

0.00, 0.00
1.20, 4.50