宝贝级python:类,并使用它们

时间:2015-03-16 03:54:57

标签: python

我正在学习课程,似乎很难掌握课程。为了尝试一些练习,我编写了以下代码:

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

  def newAge(self):
    self.age = self.age + 1

  def __str__(self):
    return '{0} ({1})'.format(self.name, self.age)

我想打印客户的年龄和他们的新时代。所以我得到了:

p1 = Customer("Amelia",21)
print (p1)

new = p1.newAge()
print (new)

这里的问题是new变量没有存储任何内容,因此它会打印None。谁能告诉我为什么我的变量没有存储?我知道我已经错误地拨打了newAge,但我不知道如何修复它。

3 个答案:

答案 0 :(得分:3)

默认情况下,没有return语句的方法返回None。让newAge()返回self.age

答案 1 :(得分:1)

虽然其他问题的建议是正确的 - 也就是说,您必须使用具有有意义价值的return方法,否则您将始终返回None - 您不会[&n; t 需要将该值存储在类实例之外。它是一个内部更新的值,您还有其他方法可以实现。

这样想:客户进来并决定今天是他们的生日,所以他们加上一个他们的年龄。这实际上是newAge方法正在实现的;它将1添加到内部self.age变量。

当您要求他们表明身份时,您只暴露了他们的实际年龄,他们会告诉您他们的姓名年龄。这就是__str__方法正在实现的目标;它一举告诉你特定顾客的名字和年龄。

因此,您可以完全省略分配,如果您打印p1而不是new,代码将按预期运行。

顺便说一句 - 如果你想添加某种吸气剂,你可以 (用合适的名字)......

def getAge(self):
    return self.age

...或者您可以直接进入酒店,这比我经历过的更为传统。

p1 = Person('Steve?', 27)
print(p1.age)  # prints 27

答案 2 :(得分:0)

newAge不会返回值,因此new = p1.newAge()会返回None。如果您在该方法结束时return self.age,它将执行我认为您想要的操作。