我对以下方法有疑问。 __len__()
。这是初步的,但我很困惑。
class PriorityQueue:
def __init__(self):
self.heap = [None]
def __len__(self):
print('len is: ', len(self.heap) - 1)
return len(self.heap) - 1
def print_len(self):
print(len(self.heap))
new = PriorityQueue()
如果我使用len(new)
,那么它产生0,而调用方法print_len()
会产生1.
这是否意味着类中的方法不使用类中的__len__
方法(覆盖len()
)并使用python定义的len()
函数?
答案 0 :(得分:3)
你正在检查两件事。当你打电话
len(new)
Python真的叫
type(new).__len__(new)
在__len__
的实施过程中,检查self.heap
的长度并减去1
,得出0
的长度。
致电时
new.print_len()
您不是致电len(self)
而是致电len(self.heap)
(1
)。如果您更改了实现以调用前者而不是后者,那么您将获得0
而不是1
。