getitem
当执行类加方括号时(a[’ ']),会调用A中的__getitem__方法
class A:
def __getitem__(self, item):
print('现在执行的是__getitem__方法,item即为方括号中的内容', item)
return 'hello'
a = A()
print(a['哈哈哈'])
###############################################################
打印结果中,a['哈哈哈']先执行了 __getitem__中的print, item即为'哈哈哈',
返回值'hello'被打印出来
setitem
当执行a[1] = '2go’时,会执行类中的__setitem__方法
def A:
def __setitem__(self, key, value):
print('执行__setitem__方法', key, value)
a = A()
a[1] = '2go'
###############################################################
1传入key
'2go'传入value
delitem
当删除对象加方括号时,执行类中的__delitem__方法
class A:
def __delitem__(self, item):
print('正在删除', item)
a = A()
del a['item']
###############################################################
只有执行del 对象加方括号时,才会调用 __delitem__(self, item),item即为方括号中的内容
一个应用: 洗牌抽牌
import random
class Poker:
def __init__(self):
self.lst = [] # 54张牌
self.__color = ['黑桃', '红桃', '花子', '片子']
self.__number = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J','Q'
,'K', 'A']
for i in self.__number:
for j in self.__color:
self.lst.append(j + str(i))
# print(self.lst)
def __getitem__(self, item): # 执行 p['']时调用
# print('第%s张牌是' % item)
return '第%s张牌是%s' % (item, self.lst[item])
def __setitem__(self, key, value): # 执行p[''] = ''时调用
pass
def __mix(self):
random.shuffle(self.lst)
print('已洗牌')
@property
def mix(self):
self.__mix()
p = Poker()
p.mix
print(p[1])