zoukankan      html  css  js  c++  java
  • 内置方法(item系列、__str__方法、__del__方法)

    一、item系列:把对象模拟成字典进行操作

    class Foo:
        def __init__(self,name):
            self.name = name
    
        def __getitem__(self, item):  # item = "name"  # 查看
            print("get item")
            return self.__dict__.get(item)
    
        def __setitem__(self, key, value):  # 设置
            print("set item")
            print(key,value)
            self.__dict__[key] = value
    
        def __delitem__(self, key):  # 删除
            print("del item")
            print(key)
            del self.__dict__[key]
    
    obj = Foo("egon")
    print(obj.__dict__)
    
    #查看属性:
    # 原本查看属性格式是obj.属性  获取属性的方式
    print(obj["name"]) # 查看name的属性,即字典的key和value的查看,如果"name"不存在,则返回None
    
    #设置属性
    #原来设置属性格式是obj.sex = "male"
    obj["sex"] = "male"  #等于添加新的key和value值
    print(obj.__dict__)
    print(obj.sex)
    
    #删除属性
    #原来是del obj.name
    del obj["name"]  #等于删除字典的key及其value

    二、__str__方法

    class People:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def __str__(self):
            return "Name:%s Age:%s" %(self.name,self.age)  # 必须有返回值,且返回值必须为字符串类型
    
    obj = People("egon",18)
    #print(obj)  # 没使用__str__方法之前,直接print(obj)得出的是内存地址
    print(obj)  # 使用__str__方法后,打印时可以直接执行该方法下面的代码,相当于 res = obj.__str__()

    三、__del__方法,

    如果在类内部定义了__del__方法(这个方法是绑定给对象的),那这个方法在对象被删除之前先被触发,然后再把对象删除

    class Open:
        def __init__(self,filename):
            print("open file ...")
            self.filename = filename
    
        def __del__(self):  # 与对象相关联的数据在这里定义回收操作
            print("回收操作系统资源:如self.close()")
    
    f = Open("settings.py")
    
    print("----main----")  #最后一行代码执行完成后,自动执行 del f  # f.__del__()
  • 相关阅读:
    ubuntu sudo 号令有效处理
    shell脚本的主笔、存储、实行
    Oracle 11gR1中细粒度访谒收集处事(4)
    Solaris效力经管工具 SMF快速入门指南(1)
    Solaris 10完成宁静Kerberos身份验证(2)
    高质量C /C编程指南第2章 程序的版式
    Solaris 10下设置EJB 3.0景遇(1)
    高质量C /C编程指南序言
    Java学习之路:不走弯路,就是捷径 www.51testing.com
    两个结构体可以直接赋值吗? 回复 "JohnsonAnother" 的问题
  • 原文地址:https://www.cnblogs.com/nanjo4373977/p/12191683.html
Copyright © 2011-2022 走看看