9 [面向对象]-内置方法
1.isinstance(obj,cls)和issubclass(sub,super)
# isinstance(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)) # 运行结果 True True
2、 item系列:属性操作
-
__setitem__,__getitem__,__delitem__
class Foo: def __getitem__(self, item): print('getitem..') print(item) def __setitem__(self, key, value): print('setitem') print(key,value) def __delitem__(self, key): print('delitem') print(key) f = Foo() f['name'] # 查看属性 obj.name f['name'] = 'alex' # 设置属性 del f['name'] # 删除属性
>>>>> getitem.. name setitem name alex delitem name
(2)例子2
# item系列 class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): # item='name' print('getitem..') return self.__dict__[item] # self.__dict__[name] def __setitem__(self, key, value): print('setitem') # print(key,value) # self.key = value # 错误演示 {'name': 'alex', 'key': 'male'} self.__dict__[key] = value # {'name': 'alex', 'sex': 'male'} def __delitem__(self, key): print('delitem') # print(key) # del self.__dict__[key] self.__dict__.pop(key) f = Foo('alex') # 1.查看属性 # obj.属性名 print(f['name']) # 查看属性obj.name # print(f['namexxx']) # 没有namexxx属性 # 2.设置属性 f['sex'] = 'male' # 添加属性 # f['sex'] = 'male' print(f.__dict__) print(f.sex) # 3.删除属性 # del obj.name del f['name'] print(f.__dict__) # 自动触发执行 # 对象可以变成字典对象,可以像字典一样的操作
>>>运行结果 getitem.. alex setitem {'name': 'alex', 'sex': 'male'} male delitem {'sex': 'male'}
3、__str__,__repr__,__format__
# 改变对象的字符串显示__str__,__repr__ # 自定制格式化字符串__format__ # str 方法 d = dict({'name':'alex'}) print(isinstance(d, dict)) print(d) # str函数或者print函数--->obj.__str__() # repr或者交互式解释器--->obj.__repr__() # 如果__str__没有被定义,那么就会使用__repr__来代替输出 # 注意:这俩方法的返回值必须是字符串,否则抛出异常 class People: def __init__(self, name, age): self.name = name self.age = age def __str__(self): print('===>str') return 'aaaa' # 返回值必须是字符串,否则抛出异常 obj = People('alex', 11) print(obj) # 执行obj.__str__()
》运行结果 True {'name': 'alex'} ===>str aaaa
4、__del__
# 析构方法,当对象在内存中被释放时,自动触发执行。 # 注:如果产生的对象仅仅只是python程序级别的(用户级),那么无需定义__del__, # 如果产生的对象的同时还会向操作系统发起系统调用,即一个对象有用户级与内核级两种资源, # 比如(打开一个文件,创建一个数据库链接),则必须在清除对象的同时回收系统资源,这就用到了__del__。 f = open('settings.py', 'r', encoding='utf-8') data = f.read() f.close() # 回收操作系统的资源 print(data) # print(f) # f.read()
# 析构方法,当对象在内存中被释放时,自动触发执行。 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__()
>>运行结果 open file ---main--- 回收操作系统资源:self.close
5.其他
博客:http://www.cnblogs.com/linhaifeng/articles/6204014.html