zoukankan      html  css  js  c++  java
  • python_day25__各种特殊方法

    #-----------__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 晚




  • 相关阅读:
    Spring+mybatis+struts框架整合的配置具体解释
    JavaScript 基础
    MySQL高可用系列之MHA(二)
    设计模式之备忘录模式
    客户管理系统之模块设计(七)
    CURL库的宏定义列表
    servlet调用的几种方式
    modprobe kvm-intel
    sql server 2008 R2 配置开启远程访问
    error: could not find library containing RSA_new
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/9859146.html
Copyright © 2011-2022 走看看