2014-04-02 36 views
1
class Artist: 
    def __init__(self, name, dob): 
     self.name = name 
     self.dob = dob 

    def get_name(self): 
     return self.name 

    def get_dob(self): 
     return self.dob 

    def age(self): 
     if get_date_today() < (2013, 12, 27): 
      return self.age 
     else: 
      return self.age + 1 


def get_date_today(): 
    return (2013, 10, 30) #'today' 

hw = Artist("Hayley Williams", (1988, 12, 27)) 
print(hw.age())  # 24 if 'today' is < (2013, 12, 27), 25 if 'today' is >= (2013, 12, 27) 

如何在else循環中執行加法操作。它不能在這裏工作,因爲我不能在方法中加1。那麼,什麼是錯的?子類別中的加法

+0

在'__init__'中沒有'self.age'這樣的東西。爲什麼? – sshashank124

+0

請將您的元組轉換爲數據並執行日期操作。你將在幾天內得到不同的結果,並在幾年內進行轉換。 – Nilesh

+0

您的代碼中有其他語義錯誤(如硬編碼「today」),這就是爲什麼您很難得到正確答案的原因。請嘗試解釋您首先想要達到的目標。 – Selcuk

回答

1
from datetime import datetime 
class Artist: 
    def __init__(self, name, dob): 
     self.name = name 
     self.dob = dob 

    def get_name(self): 
     return self.name 

    def get_dob(self): 
     return self.dob 

    def age(self): 
     return ((datetime.today() - datetime(*self.dob)).days)/365 

datetime是模塊在Python其中用於執行日期realted操作。 datetime.today會返回你當前的日期。

1

您的__init__循環中沒有self.age變量。試試這個:

class Artist: 
    def __init__(self, name, dob, age): 
     self.name = name 
     self.dob = dob 
     self.age = age 

    def get_name(self): 
     return self.name 

    def get_dob(self): 
     return self.dob 

    def get_age(self): 
     if get_date_today() < (2013, 12, 27): 
      return self.age 
     else: 
      return self.age + 1 
+0

你正在覆蓋字段'age'。一旦它是一個方法('age()'),一旦它是一個變量('__init __()''中的'age')。 – Alfe

+0

任何人,爲什麼downvote?這樣我可以改進或刪除我的答案? – sshashank124

+0

@Alfe,那是OP的代碼,不是我的。現在會改變它,謝謝。 – sshashank124

0

您正在嘗試將您沒有數據的age()方法中的年齡返回。決定從哪裏獲取數據並將其存儲起來,然後您可以使用該方法將其返回。實現這一

一種方法是讓在對象的構造數據:

def __init__(self, birthday): 
    self.birthday = birthday 
    # store also your other data like name and dob 

,那麼你可以用它來計算年齡:

def age(self): 
    if get_date_today() < (2013, 12, 27): 
    return get_date_today() - self.birthday 
    else: 
    return get_date_today() - self.birthday + 1 
    # this assumes of course that you are using a date type which understands subtraction 

但也有像得到其他方式從數據庫中提取年齡,或只是返回施工時間(參見sshashank124的答案)。