python面向对象的特殊方法补充
特殊方法
初始化方法
- init
创建前置方法,在init之前 (构造方法)
- new
class practise(object): def __init__(self,name): self.name = name def __new__(cls,*args,**kwagrs) print('正在创建新方法') return object.__new__(cls)call方法,对象执行(object())加括号,默认执行类下的__ call __ 方法
class practise(object): def __init__(self,name): self.name = name def __call__s(self,*args,**kwagrs) print('正在执行call方法') >>> a = practise('alex') >>> a() #正在执行call方法str方法 将对象字符串格式化(str(obj)),返回字符串(备注)
class practise(object): def __init__(self,name): self.name = name def __str__(self): return '这是str方法' a = practise() b = str(a) print(b) print(a) #可直接print对象,显示类的备注dict方法(展示全部变量从类或者对象)(以字典存在)
class practise(object): def __init__(self,name,age): self.name = name self.age = agesetitem getitem delitem (仿dict方法)
#info的方法 class info(object): def __init__(self,name): self.name = name def __setitem__(self, key, value): print(f'{key}:{value}') def __getitem__(self,name): print(f'{name}') def __delitem__(self,name): print(f'del {name}') a = info('alex') a['213'] = 456 a['123'] del a['123']enter,exit(类似装饰器)
- with … as …必须拥有enter和exit
- with … as … f 名称为上下文管理
#模拟数据库连接 class connectsql(object): def __enter__(self): self.sqlconect = link to sql return sqlconect def __exit__(self, type, value, traceback): self.sqlconnect.close() with connectsql() as f: f.操作() #with+类调用 class longlongago(object): def __init__(self,name): self.name = name def show_name(self): print(self.name) def __enter__(self): return self def __exit__(self, type, value, traceback): print('结束') with longlongago('alex') as f: f.show_name()add
- 对象相加
#对象相加 class plusobj(object): def __init__(self,name): self.name = name def __add__(self,other): return self.name + other.name a = plusobj('aka') b = plusobj('cui') c = a + b print(c)