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