2013-10-20 96 views
-1

這裏是我Transaction類:TypeError:'str'對象不可調用// class?

class Transaction(object): 
    def __init__(self, company, price, date): 
     self.company = company 
     self.price = price 
     self.date = date 
    def company(self): 
     return self.company 
    def price(self): 
     return self.price 
    def date(self): 
     self.date = datetime.strptime(self.date, "%y-%m-%d") 
     return self.date 

,當我試圖運行date功能:

tr = Transaction('AAPL', 600, '2013-10-25') 
print tr.date() 

,我發現了以下錯誤:

Traceback (most recent call last): 
    File "/home/me/Documents/folder/file.py", line 597, in <module> 
    print tr.date() 
TypeError: 'str' object is not callable 

如何我能解決這個問題嗎?

+0

你不能有一個與方法同名的實例變量,顯然 –

回答

2

self.date = date中,self.date這裏實際上隱藏了方法def date(self),所以您應該考慮更改屬性或方法名稱。

print Transaction.date # prints <unbound method Transaction.date> 
tr = Transaction('AAPL', 600, '2013-10-25') #call to __init__ hides the method 
print tr.date   # prints 2013-10-25, hence the error. 

修正:

def convert_date(self): #method name changed 
     self.date = datetime.strptime(self.date, "%Y-%m-%d") # It's 'Y' not 'y' 
     return self.date 

tr = Transaction('AAPL', 600, '2013-10-25') 
print tr.convert_date()  

輸出:

2013-10-25 00:00:00 
+1

我正準備自己寫這個,然後我看到你已經寫過了:P –

1

您有一個實例變量(self.date)和由相同的名稱的方法def date(self):。在構造實例時,前者覆蓋後者。

考慮重命名您的方法(def get_date(self):)或使用properties