最近在用Python模拟栈操作的时候,发现了一个有意思的现象:
Python的构造函数init并非直接初始化,而是在对类创建实例的时候就初始化,而是在后续调用某个成员方法的时候才初始化。
代码如下:
class Stack:
#拼写错误,导致构造函数失效
#把init写成了int
#会报错:AttributeError: 'Stack' object has no attribute 'stack'
def __int__(self):
self.stack = []
def push(self,e):
self.stack.append(e)
def pop(self):
return self.stack.pop()
def get_top(self):
if len(self.stack) > 0:
return self.stack[-1]
s = Stack()
s.push(1)
s.push(2)
s.push(3)
print(s.pop())
print(s.get_top())
在执行 s.push(1) 这句的时候,程序报错:
AttributeError: 'Stack' object has no attribute 'stack'
找了半天,没找到问题。后来在网上一篇文章里看到,说是尽量使用IDE的自动补全机制,这样可以避免自己写错。我确实用的pycharmd的自动补全写的,但还是出了