内置方法(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__()
posted @ 2020-01-14 14:04  南啾  阅读(366)  评论(0编辑  收藏  举报