类的内置方法
isinistance(obj, cls)
检查obj是否是类cls的对象
class Foo(object): pass obj = Foo() print(isinstance(obj, Foo))
issubclass(sub,super)
检查sub类是否是super类的派生类
class Foo(object): pass class Bar(Foo): pass print(issubclass(Bar, Foo))
__setitem__,__getitem__,__delitem__
把对象模拟成像字典对象操作一样的类型
__getitem__ 查看属性
class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): # item = "name" 通过字符串访问属性 # print("getitem...") # print(item) return self.__dict__.get(item) obj = Foo("alex") # print(obj.__dict__) # obj.属性 obj["name"] #按照这种形式取值
__setitem__ 设置属性
class Foo: def __init__(self, name): self.name = name def __setitem__(self, key, value): # 设置值 # print("setitem...") # print(key, value) self.__dict__[key]=value obj = Foo("alex") # print(obj.__dict__) # obj.sex = "male" # 以前设值(赋值) obj["sex"] = "male" print(obj.__dict__) print(obj.sex)
__delitem__ 删除属性
class Foo: def __init__(self, name): self.name = name def __delitem__(self, key): # 删除属性 # print("delitem..") # print(key) # self.__dict__.pop(key) del self.__dict__[key] obj = Foo("alex") # print(obj.__dict__) print(obj.__dict__) # del obj.name del obj["name"] print(obj.__dict__)
__str__,__repr,__format__
d = {"name": "egon"} # 本质上是dict类的实例 # d = dict({"name": "egon"}) # print(isinstance(d, dict)) print(d) #{'name': 'egon'} class Foo: pass obj = Foo() print(obj) #<__main__.Foo object at 0x000001E4EF704B00>
本质是d和obj都是类的实例,但是打印的结果不一样
__str__方法
在打印时触发,把返回值以字符串的形式,作为打印的内容
# __str__方法(一定要返回字符串类型)(打印对象的时候会触发该方法的执行) class People: def __init__(self, name, age): self.name = name self.age = age def __str__(self): # 在打印时触发,把返回值以字符串的形式,作为打印的内容 # print("----->str") return "<name:%s,age:%s>" % (self.name, self.age) obj = People("alex", 20) print(obj) # print(obj.__str__())
__del__ 回收资源
在对象删除的时候会自动先触发该功能
# __del__ 回收资源(绑定给对象的) 在对象删除的时候会自动先触发该功能 # f = open("a.text") # 在应用程序中拿到的是单纯的f,在操作系统中实际上是打开了一个文件 # f.read() # 应用程序对操作系统的调用 # f.close() # 回收操作系统资源 f 还是存在 class Open: def __init__(self,filename): print("open file.....") self.filename = filename def __del__(self): print("回收操作系统资源:self.close()") f = Open("start.py") del f # f.__del__() 手动 print("-------main-----") # f.__del__() 自动 程序结束python会自动回收掉f(del f),遗留下了操作系统资源。__del__回收操作系统资源