假设:我想买台饮料贩卖机。
class Machine(): # 卖机器的
nothing = False
def put_drink(self): # 装饮料的功能
while not self.nothing:
yield "1瓶"
my_machine = Machine() # 我买了一台
嗯,机器就放在楼下吧,现在往里面放满饮料。
ds_drink_machine = my_machine.put_drink() # downstairs drink machine 楼下的饮料机
饮料也放完了,坐等收钱。
In [59]: next(ds_drink_machine) # A买了1瓶
Out[59]: '1瓶'
In [60]: next(ds_drink_machine) # B买了1瓶
Out[60]: '1瓶'
In [61]: [next(ds_drink_machine) for drink in range(2)] # C买了2瓶
Out[62]: ['1瓶', '1瓶']
... ...
my_machine.nothing = True # 没饮料了
N个人买过之后,Y过来买饮料。
In [100]: next(ds_drink_machine)
Out[101]: StopIteration # 没饮料了
... ...
之后来了M个人,都没饮料。晚上我去看我的机器,我去,啥时候没饮料了,都不吱个声。没办法,再装满吧。
my_machine.nothing = False
ds_drink_machine = my_machine.put_drink() # 装满饮料
N个人买完之后,Z来了,正好我在楼下,他告诉我,你可以弄个徽信支付呀,这样你不但知道谁买了多少,而且还知道啥时候卖完。我一想,这是个好办法,弄个去。(添加函数功能)
class Machine():
nothing = False
def hx_pay(self):
return next(self.put_drink())
def put_drink(self):
while not self.nothing:
yield "1瓶"
ok, 这下好了
In [150]: my_machine.hx_pay() # F使用徽信买了一瓶
Out[150]: '1瓶'
In [151]: my_machine.hx_pay() # G使用徽信买了一瓶
Out[151]: '1瓶'
In [152]: my_machine.hx_pay() # H使用徽信买了一瓶
Out[152]: '1瓶'
等哈, 我怎么没收到谁买了几瓶,看了下徽信介绍,噢,我没开那个功能,我打开下。(加个装饰器)
class Machine():
nothing = False
def new_character(func):
def wrapper(self, name, count, *args, **kwargs):
print("%s使用徽信支付购买%d瓶饮料" % (name, count))
for _ in range(count):
print(func(self))
return wrapper
@new_character
def hx_pay(self):
return next(self.put_drink())
def put_drink(self):
while not self.nothing:
yield "1瓶"
大功告成,坐享其成。
In [211]: my_machine.hx_pay("小智", 2) # 小智使用徽信买了2瓶
小智使用徽信支付购买2瓶饮料
1瓶
1瓶
In [212]: my_machine.hx_pay("小霞", 1) # 小霞使用徽信买了1瓶
小霞使用徽信支付购买1瓶饮料
1瓶
In [213]: my_machine.hx_pay("小刚", 3) # 小刚使用徽信买了3瓶
小刚使用徽信支付购买3瓶饮料
1瓶
1瓶
1瓶
这下舒坦很,就知道卖了多少了。