python - Python OOP 输出返回错误,有人有想法吗?
问题描述
我目前正在学习如何在 python 中编写面向对象的编程,并且我编写了这段代码(其中一部分是我正在学习的课程的一部分)
class Toolbox:
def __init__(self, tool):
pass
class Hammer:
def __init__(self, color):
pass
class Screwdriver:
def __init__(self, size):
pass
class Screw:
MAX_TIGHTNESS = 5
def __init__(self):
self.tightness = 0
def loosen(self):
if (self.tightness > 0):
self.tightness -= 1
def tighten(self):
if (self.tightness < self.MAX_TIGHTNESS):
self.tightness += 1
def __str__(self):
return "Screw with tightness {}".format(self.tightness)
class Nail:
def __init__(self):
self.in_wall = False
def nail_in(self):
if (not self.in_wall):
self.in_wall = True
def remove(self):
if (self.in_wall):
self.in_wall = False
def __str__(self):
return "Nail {}in wall.".format("" if self.in_wall else "not ")
hammer = Hammer("blue")
sdriver = Screwdriver("300")
#tbox = Toolbox()
tool1 = Toolbox(hammer)
tool2 = Toolbox(sdriver)
screw1 = Screw()
print(screw1)
screw1.tighten()
print(screw1)
nail1 = Nail()
print(nail1)
nail1.nail_in
print(nail1)
print(screw1) 的输出有效,但 print(nail1) 给了我相同的输出(墙上的钉子。)两次,而不是墙上的钉子。我想我的逻辑有问题,我似乎无法弄清楚。有人能帮我吗?
谢谢!马克
解决方案
你需要打电话 nail_in
——就像你已经在做的那样screw1.tighten
。所以这样做(注意这里的括号):
nail1.nail_in()
通过此修复,您的代码可以正常工作:
Screw with tightness 0
Screw with tightness 1
Nail not in wall.
Nail in wall.
通过引用函数但不带括号,它是语法上有效的代码行,但它只是函数对象本身的表达式,并且因为您没有对它做任何事情(例如将其分配给变量),然后它被简单地丢弃。
推荐阅读
- javascript - 笑话/酶 expect.any(ReactComponent)
- sql - 从 SELECT 语句中导出数据
- google-cloud-platform - 在 BigQuery 目标中导出日志接收器 - Google Cloud Platform
- r - R中的性别检测
- json - 将对象转换为数组
- asp.net-core - 使用 Windows 身份验证的自定义状态代码页
- python - 将图像添加到 tkinter 网格但未显示
- angular - ng2-charts - Tolltip color dont match line color
- c++ - 未能在 SFINAE 中将概念类型识别为 bool
- r - 那么,Carets jumpBackward 究竟是如何工作的呢?