我正在学习课程,似乎很难掌握课程。为了尝试一些练习,我编写了以下代码:
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
,但我不知道如何修复它。
答案 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
,它将执行我认为您想要的操作。