首页 > 解决方案 > 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) 给了我相同的输出(墙上的钉子。)两次,而不是墙上的钉子。我想我的逻辑有问题,我似乎无法弄清楚。有人能帮我吗?

谢谢!马克

标签: pythonpython-3.x

解决方案


你需要打电话 nail_in——就像你已经在做的那样screw1.tighten。所以这样做(注意这里的括号):

nail1.nail_in()

通过此修复,您的代码可以正常工作:

Screw with tightness 0
Screw with tightness 1
Nail not in wall.
Nail in wall.

通过引用函数但不带括号,它是语法上有效的代码行,但它只是函数对象本身的表达式,并且因为您没有对它做任何事情(例如将其分配给变量),然后它被简单地丢弃。


推荐阅读