子类中的加法

1 投票
3 回答
796 浏览
提问于 2025-04-18 00:58
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

你在方法 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的回答)。

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
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 可以获取当前的日期。

撰写回答