在子类中添加

时间:2014-04-02 08:30:45

标签: python

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。那有什么不对?

3 个答案:

答案 0 :(得分:1)

您的self.age循环中没有__init__变量。试试这个:

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

答案 1 :(得分: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中用于执行日期实现操作的模块。 datetime.today会返回您当前的日期。

答案 2 :(得分: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及其答案)。