#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 特殊方法 __init__ __del__ __call__ ''' class Foo: #构造方法:创建对象时自动执行 def __init__(self): pass #析构方法:当某个对象长期不使用,python的垃圾回收机制会将该对象从内存中清理掉 #在清理前,如果类中定义的析构函数,会先执行一下析构函数,然后再清理该对象 #如果没有析构函数,就直接进行清理 def __del__(self): pass #在对象后面直接加小括号(),会自动执行该方法。如:obj = Foo() obj()---就会直接执行该方法 def __call__(self, *args, **kwargs): pass #创建一个对象后,如果直接print该对象,将会打印出该对象的内存地址 #如果在类中定义了__str__方法,再print该对象时,就会打印__str__方法的返回值 def __str__(self): return 'hahahaha' # 在对象后面直接加中括号[],会自动执行该方法。如:obj = Foo() obj['xxx']---就会直接执行该方法 def __getitem__(self, item): print(type(item),item) if isinstance(item,str): #判断item是否是str类型 print(item) elif isinstance(item,slice): #判断item是否是slice类型 print(item.start,item.stop,item.step) #对象赋值的表现形式:obj['k1'] = 'v1' 会自动调用该方法 def __setitem__(self, key, value): print(key,value) #删除对象的表现形式:del obj['k1'] 会自动调用该方法 def __delitem__(self, key): pass #默认情况下对象时不可被迭代的 #要想对象被迭代,需要__iter__方法,并且该方法的返回值要是个生成器 def __iter__(self): return iter([11,22,33,44]) obj = Foo() print(obj) #调用Foo类的__str__方法 print(obj.__dict__) #获取obj对象中所有封装的字段 print(Foo.__dict__) #获取类中所有方法 obj['alex'] #自动执行__getitem__方法(参数是str类型) obj[1:4:2] #自动执行__getitem__方法(参数是slice类型 1:4:2----start:stop:step) obj['k1'] = 'v1' #自动执行__setitem__方法 del obj['k1'] #自动调用__delitem__方法 #迭代对象会自动执行类的__iter__方法,没有会报错(默认对象时不可被迭代的) for item in obj: print(item)
#! /usr/bin/env python # -*- coding: utf-8 -*- """ class 特殊方法 : __enter__ __exit__ """ class SQLHelper(object): """ sql打开连接,执行命令,关闭连接 """ def open(self): pass def fetch(self, sql): pass def close(self): pass def __enter__(self): self.open() return self def __exit__(self, exc_type, exc_val, exc_tb): self.close() if __name__ == '__main__': with SQLHelper() as obj: # 使用with,会自动调用类中的__enter__方法,obj就是__enter__的返回值 obj.fetch('select xxxx') # 当命令执行完后,会自动调用类中的__exit__方法 """等价于""" obj = SQLHelper() obj.open() # 打开sql连接 obj.fetch() # 执行sql命令 obj.close() # 关闭sql连接
""" __dict__方法 """ class Foo(object): AGE = 23 def __init__(self, name): self.name = name print(Foo.__dict__) # 类的__dict__方法,查看类中拥有的东西:AGE字段、__init__方法 obj = Foo('alex') print(obj.__dict__) # 对象的__dict__方法,查看对象拥有的东西:name:alex
其他
#!/usr/bin/env python # -*- coding: utf-8 -*- class Bar: pass class Foo(Bar): pass obj = Foo() print(isinstance(obj,Foo)) #判断obj是不是Foo的对象,是则返回True print(isinstance(obj,Bar)) #判断obj(或obj类型的父类)是不是Bar的对象,是则返回True print(issubclass(Foo,Bar)) #判断Bar是否是Foo的子类,是则返回True
关注我的公众号,不定期推送资讯
本文来自博客园,作者:链条君,转载请注明原文链接:https://www.cnblogs.com/MacoLee/articles/6038579.html