我从http://blog.thedigitalcatonline.com/blog/2014/08/21/python-3-oop-part-4-polymorphism/#.VvwAbjG1XGB
获得以下内容class Room:
def __init__(self, door):
self.door = door
def open(self):
self.door.open()
def close(self):
self.door.close()
def is_open(self):
return self.door.is_open()
class Door:
def __init__(self):
self.status = "closed"
def open(self):
self.status = "open"
def close(self):
self.status = "closed"
def is_open(self):
return self.status == "open"
当我这样做时:
>>> door = Door()
>>> r= Room(door)
>>> r.door.is_open()
False
我认为它应该返回“关闭”而不是假,为什么这不起作用?
答案 0 :(得分:4)
一切正常。此方法返回self.status == "open"
的结果。默认情况下,此门为"closed"
,因此返回值为False
。
答案 1 :(得分:2)
它不起作用,因为它完全按照你的要求去做。您的代码为:
return self.status == "open" # returns True or False
而不是
return "open" if self.status == "open" else "closed"` # returns 'open' or 'closed'
这是您正在寻找的行为。
答案 2 :(得分:1)
==
中的return self.status == 'open'
是Python的等式运算符,它返回True或False,具体取决于它比较的项是否相等。
要返回'关闭',返回值为return self.status
。
方法的名称 - is_open
- 暗示它将返回一个布尔值 - True
或False
;命名方法is_something
或has_something
是编程语言中的常用约定,表示将返回布尔值。
答案 3 :(得分:1)
您的代码中存在两个问题:
self.status
。