import pdb
class Stack:
"""simple Stack.""" #这串string可以通过 Stack.__doc__ 调到
# 这个类似类静态成员了,被整个类拥有
population = 0
#__init__()定义该类的构造函数,self.xxx都将成为本类的成员变量
def __init__(self):
self.items = []
Stack.population += 1 #这可以用于查看我们共用 Stack 实例化了多少个对象了
#__str__()函数定义对该类型的对象进行强制类型转换str()的行为
def __str__(self):
strItems = list(map(str, self.items))
return "<=".join(strItems)
#__call__()函数定义对该类型的对象abc进行调用的行为eg. y = abc(x)
def __call__(self, data):
if isinstance(data, list):
for i in data:
self.push(i)
else:
self.push(data)
#这样就可以通过[]访问我们这个类型的对象
def __getitem__(self, key):
return self.items[key];
def __setitem__(self, key, item):
self.items[key] = item
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item) #self.items.insert(0, item)则是在第0个元素前插入item
def pop(self):
return self.items.pop() #self.items.pop(0)则是弹出第0个元素
def peek(self):
return self.items[len(self.items) - 1]
def size(self):
return len(self.items)
@classmethod
def how_many(abc): # 类似静态成员函数,所以加上 @classmethod修饰
pdb.set_trace()
print("We have {} Stacks.".format(abc.population))
if __name__ == "__main__":
a = Stack()
a.push(1.62)
a.push(3)
a.push('hello')
a([3.14, 'bingo', 4325])
print(str(a))
print(a[4])
a[1] = 9.34
print(str(a))
b = Stack()
b([1,2,3,4,5])
print(b)
print(Stack.how_many())
self.__dict__ 将返回本类所有成员变量(属性)组成的字典。所以本类存放的所有东西,可以直接放在self.xx里,然后结合 __getitem__() 方法,外部把他当成一个字典使用