#-----------__add()__特殊方法-----------#
# class Foo:
# def __init__(self,name,age):
# self.name = name
# self.age = age
# def __add__(self,other):
# #self = obj1('haijing',19)
# #other = obj2('min',18)
# #return 123 #返回值可以任意的定义的啊
# return slef.age+other.age #返回的是18+19
#
# obj1=Foo('haijing',19)
# obj2=Foo('min',18)
# ret = obj1+obj2 #两个对象相加,自动执行第一个对象的__add__()方法,并且将第二个对象当作参数传递进入
# print(ret,type(ret))
#-------------析构方法(对象被销毁时自动执行)----------------#
#和java一样,在python中也会有销毁没人用的变量的空间的
# class Foo:
# def __del__(self):
# print('析构方法')
#----------__dict__() 作用:将对象中封装的所有内容通过字典的形式返回----------#
# class Foo:
# def __init__(self,name,age):
# self.name = name
# self.age = age
# self.a = '123'
#
# obj = Foo('haijing',18)
# d = obj.__dict__ #重要的是将没有调用到的对象,比如self.a,也给显示出来
# print(d) #打印{'name': 'haijing', 'age': 18, 'a': '123'}
#
# b = Foo.__dict__
# print(b) #将类中的所有方法打印出来,包括注释也会打印出来
#----------__getitem__方法、__setitem__和__delitem__方法,用来处理列表+对象的语句----------# *****
#先回顾以前讲过的列表的知识:
# li = [11,22,33,44] #相当于li = list([11,22,33,44])
# r1 = li[3] #去除列表中的第四个值
# del li[3] #删除列表中的第四个值
# print(li) #打印[11, 22, 33]
# li[2]=666 #给列表修改值
# print(li) #打印[11, 22, 666]
class Foo:
def __init__(self,name,age):
self.name = name
self.age = age
self.a = '123'
def __getitem__(self,item):
return item+10
def __setitem__(self,key,value):
print(key,value)
def __delitem__(self, key):
print(key)
li = Foo('haijing',18) #创建对象
r = li[8] #自动执行__getitem__方法,自动将8当作参数传递给item
print(r) #打印18
li[100] = 'haijing' #自动执行__setitem__方法,自动将100传给key,将haijing传给value,所以这一句打印100 haijing
del li[999] #自动执行__delitem__方法,将999传给key
#----------对列表进行索引和切片取值----------# ******
class Foo:
def __init__(self,name,age):
self.name = name
self.age = age
self.a = '123'
def __getitem__(self,item):
if type(item)==slice:
print('调用者希望内部进行切皮处理')
# slice中有start、stop、step属性 可以按下ctrl鼠标指向slice即可查看slice内部的属性
print(slice.start) #打印<member 'start' of 'slice' objects>
print(slice.stop) #打印<member 'stop' of 'slice' objects>
print(slice.step) #打印<member 'step' of 'slice' objects>
else:
print('调用者希望内部进行索引处理')
li = Foo('haijing',18)
li[123] #按照索引方式取值 索引是中的123整形 打印调用者希望内部进行索引处理
li[1:4:2] #按照切片方式取值,执行__getitem__方法,1为起始值 4为终止值 2为步长,切片中的1:4:2是slice型,并且把1:4:2传给item
#上边这一句打印调用者希望内部进行切片处理 如果中括号中有冒号,传给item的肯定就是slice类型了
#切片用的较少,索引用的还是较多的
haijing in HZ 今天研究生迎新晚会 但都不如你
2018.10.26 晚