Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
婴儿级python:类及其使用_Python - Fatal编程技术网

婴儿级python:类及其使用

婴儿级python:类及其使用,python,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) 我想打印

我正在学习课程,似乎很难掌握。为了获得一些实践,我编写了以下代码:

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
,但我不知道如何修复它。

默认情况下,没有
返回的方法
语句return
None
。默认情况下,使
newAge()
return
self.age
方法不带
return
语句return
None
。Make
newAge()。如果你
在该方法结束时返回self.age
,它将执行我认为你希望它执行的操作

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

虽然其他问题中的建议是正确的-也就是说,您必须有一个带有有意义的值的
return
方法,或者您总是返回
None
-您不需要将该值存储在类实例之外。这是一个内部更新的值,您可以通过其他方式获得它

可以这样想:一位顾客进来,决定今天是他们的生日,所以他们在年龄上加了一个。这就是
newAge
方法有效地实现的功能;它在内部
self.age
变量中添加了1

只有当你要求他们表明身份时,你才暴露了他们的实际年龄,他们会告诉你他们的姓名和年龄。这就是
\uuuu str\uuuu
方法所实现的;它可以一次性告诉您特定客户的姓名和年龄

因此,如果打印的是
p1
,而不是
new
,则可以完全省略赋值,代码的行为将与预期的一样

顺便说一下,如果您想添加某种getter,您可以(使用适当的名称)

…或者你可以直接访问该物业,这与我的经历相比更为传统

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

虽然其他问题中的建议是正确的-也就是说,您必须有一个带有有意义的值的
return
方法,或者您将始终返回
None
-您不需要将该值存储在类实例之外。这是一个内部更新的值,您可以通过其他方式获得它

可以这样想:一位顾客进来,决定今天是他们的生日,所以他们在年龄上加了一个。这就是
newAge
方法有效地实现的功能;它在内部
self.age
变量中添加了1

只有当你要求他们表明身份时,你才暴露了他们的实际年龄,他们会告诉你他们的姓名和年龄。这就是
\uuuu str\uuuu
方法所实现的;它可以一次性告诉您特定客户的姓名和年龄

因此,如果打印的是
p1
,而不是
new
,则可以完全省略赋值,代码的行为将与预期的一样

顺便说一下,如果您想添加某种getter,您可以(使用适当的名称)

…或者你可以直接访问该物业,这与我的经历相比更为传统

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

不是你错了。我觉得你忽略了真正的误解,不是你错了。我觉得你忽略了实际的误解。没有返回声明解决问题有可能吗?没有返回声明解决问题有可能吗?