python类中特殊方法
1、__doc__
打印当前类的描述信息,也就是注释部分。
class test(object): """ this is a msg """ pass print(test.__doc__) #输出 this is a msg
2、__class__
输出当前实例的类名
class test(): def foo(self): print(123) obj = test() print(obj.__class__) #输出<class '__main__.test'>
3、__str__
如果类中有str方法的话直接打印实例,会输出str方法中定义的返回内容,而非一个内存地址
class test(): def __str__(self): return('this is a msg') obj = test() print(obj) #输出this is a msg
4、__dict__
打印类中的属性。
class test(): def A(self): a = 1 def B(self): pass def __str__(self): return('this is a msg') obj = test() print(test.__dict__) #输出{'__module__': '__main__', 'A': <function test.A at 0x00FBA540>, 'B': <function test.B at 0x00FBA588>, '__str__': <function test.__str__ at 0x00FBA5D0>, '__dict__': <attribute '__dict__' of 'test' objects>, '__weakref__': <attribute '__weakref__' of 'test' objects>, '__doc__': None}
5、__init__
构造方法,创建实例时候会自动执行,面向对象中非常常用,一般用来封装各种参数
class test(): def __init__(self,name,age): print(name,age) obj = test('django','18') #输出django 18
6、__del__
与 init() 方法对应的是 __del__() 方法,__init__() 方法用于初始化 Python对象,而 __del__() 则用于销毁 Python 对象,即在任何 Python 对象将要被系统回收之时,系统都会自动调用该对象的 __del__() 方法。
class test(): def __init__(self,name,age): print(name,age) def __del__(self): print("回收") obj = test('django','18')
7、__call__
加括号执行
class test(): def __call__(self, *args, **kwargs): print('call') def a(self): print('a') obj = test() obj() obj.a() #输出call,a
8、__new__
new方法和init方法的区别就是,new方法是正在创建实例时候执行,而init方法是创建实例后才执行。
class PositiveInteger(int): def __new__(cls, value): return super(PositiveInteger, cls).__new__(cls, abs(value)) i = PositiveInteger(-3) print(i)
__new__方法单机实例
class Singleton(object): def __new__(cls): # 关键在于这,每一次实例化的时候,我们都只会返回这同一个instance对象 if not hasattr(cls, 'instance'): cls.instance = super(Singleton, cls).__new__(cls) return cls.instance obj1 = Singleton() obj2 = Singleton()
自定义构建函数
class asd(object): def __new__(cls, *args, **kwargs): r = super(asd,cls).__new__(cls) r.initialize(*args) return r class bnm(asd): def initialize(self): print('bnm_initialize is running') class foo(asd): def initialize(self,name): self.name = name print('foo_initialize is running, my name is %s' %(self.name)) r = bnm() r1 = foo('test')
9、__getitem__ __setitem__ __delitem__
用于索引操作,如字典。以上分别表示获取、设置、删除数据
#coding=utf-8 class Foo(object): def __getitem__(self, key): print('__getitem__', key) def __setitem__(self, key, value): print('__setitem__', key, value) def __delitem__(self, key): print('__delitem__', key) obj = Foo() result = obj['k1'] # 自动触发执行 __getitem__ obj['k2'] = 'alex' # 自动触发执行 __setitem__ del obj['k1'] # 自动触发执行 __delitem__ #输出 #__getitem__ k1 #__setitem__ k2 alex #__delitem__ k1
Welcome to visit