__str__没有工作python

时间:2013-03-08 18:52:56

标签: python

我正在深入研究一些面向对象的编程。不幸的是,我甚至无法迈出第一步。使用 str 将类转换为字符串。这是我的代码:

class Time:

    def __init__(self, hours = 0, minutes = 0, seconds = 0):
        self.hours = hours
        self.minutes = minutes
        self.seconds = seconds

    def __str__(self):
        return "basdfadsg"



time1 = Time

time1.hours = 3
time1.minutes = 23
time1.seconds = 13

print(time1)

每当我尝试

print(time1)

它返回

<class '__main__.Time'>

我做错了什么?

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:8)

您需要Time实例。例如time1 = Time()(注意括号)。

实际上,您正在修改,而不是类的实例 - 而__str__只告诉python如何从实例创建字符串班级,而不是班级本身...

答案 1 :(得分:2)

如果你真的试图让一个类__str____repr__与一个类的实例相比,你需要以这种方式使用元类:

>>> class Test(type):
...    def __repr__(self):
...       return 'Test is my name'
... 
>>> class MT(object):
...    __metaclass__=Test
... 
>>> print MT
Test is my name

但是,正如其他人所说,你更有可能不是通过调用__init__来指代时间实例

答案 2 :(得分:1)

你的问题在这里:

time1 = Time

您没有创建类Time的INSTANCE并将其传递给time1,而是将该类的TYPE传递给time1。

要使此代码按您的意愿工作,只需调用对象构造函数:

time1 = Time()

您可能会想“为什么有人需要变量来保存TYPE而不是INSTANCE?”好吧,在Python中,类定义(以及几乎所有其他)是可以在运行时修改的第一类对象,允许从类定义中动态添加/删除成员和成员函数。玩得开心 pythoning ,这真是个爆炸。