2013-03-08 99 views
3

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

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'> 

我在做什么错?

任何帮助,将不胜感激!

回答

7

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

正因为如此,要修改的,不是实例的类的 - 而__str__只告诉蟒蛇如何从类的实例创建的字符串,而不是类本身...

+0

这是非常快的。 – 2013-03-08 18:54:22

+0

@MarkRansom - 我想是在正确的时间。 – mgilson 2013-03-08 18:55:11

+0

我想知道是否有可能为类对象本身添加一个__str__方法?不是说它会有用,我只是好奇。 – 2013-03-08 18:58:11

1

你的问题是在这里:

time1 = Time 

没有创建上课时间的实例,并传递一个到该时间点,而是逝去的那个类的类型时间1。

可根据需要有这样的代码工作,只需调用对象的构造函数:“为什么会有人需要一个变量来保存一个类型,而不是实例的”

time1 = Time() 

你也许会想那么,在Python中,类定义(以及其他几乎所有的东西)都是第一类对象,可以在运行时修改它们,以便动态地将成员和成员函数添加到类定义中或从类定义中删除。玩得开心pythoning,它确实是一个爆炸。

+0

谢谢,同样有帮助! – 2013-03-08 19:07:40

2

如果你真的是想有一类VS类的一个实例__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__