2013-03-08 127 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__