1.__init__():
类中的初始化函数,可以显式显示即子调用类的时候以进行了函数的初始化。
通过vars函数获知显示声明的属性,但是隐式的就无法获知了,
2.__str__():
直接打印对象的实现方法,__str__是被print函数调用的,一般都是return一个什么东西,这个东西应该是以字符串的形式表现的。如果不是要用str()函数转换,我们可以直接print的对象都是实现了__str__这个方法的。
函数返回一定是Str类型,当print(test())中test中的__str__函数返回的是非str类型,就会报错。
class test:
def __init__(self):
self.a=1
self.b=2
def __str__(self):
return 'happy everyday'
print(test().__str__())
print(test())
3.__new__():
在object类中存在一个静态的__new__(cls, *args, **kwargs
)方法,该方法需要传递一个参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供,__new__方法必须有返回值,且返回的是被实例化的实例,只有在该实例返回后才会调用__init__来进行初始化,初始化所用的实例就是__new__返回的结果,也就可以认为是self。可用于调用别的类。
python定义类时,class()与class(object)的区别
在python2中,class(object)定义时,class继承了object()的属性;
在python3中,class()默认继承了object();
class test_obj():
def __init__(self):
print('another obj')
self.a=3
self.b=4
def __str__(self):
return 'hello'
class test():
def __init__(self):
self.a=1
print('---init---')
self.b=2
def __str__(self):
return 'hello'
def __new__(new_obj,*args,**kwargs):
print("create a new obj")
test_obj_new = test_obj()
return test_obj_new
test().a
是先进行了__new__()方法在对实例进行初始化操作。
因此可以这么描述__new__()和__ini__()的区别,在新式类中__new__()才是真正的实例化方法,为类提供外壳制造出实例框架,然后调用该框架内的构造方法__init__()使其丰满。
4.__unicode__():
__unicode__()方法是在一个对象上调用unicode()时被调用的。因为Django的数据库后端会返回Unicode字符串给model属性,所以我们通常会给自己的model写一个__unicode__()方法。如果定义了__unicode__()方法但是没有定义__str__()方法,Django会自动提供一个__str__()方法调用 __unicode__()方法,然后把结果转换为UTF-8编码的字符串对象,所以在一般情况下,只定义__unicode__()方法,让 Django来处理字符串对象的转换
python3 只保留了__str__()的方法,具体作用基本相同,同是对一个对象进行美化输出。
5.__call__():
对象通过提供__call__()方法可以模拟函数的行为,如果一个对象提供了该方法,就可以像函数一样使用它。定义了该函数
class test():
def __init__(self):
self.a=1
print('---init---')
self.b=2
def __call__(self,x,y):
return x**y
print(test()(4,3))
6、__len__():
返回值需为int类型,平常len调用后就会调用该函数。可定制输出
7.__repr__():
repr() 转化为供解释器读取的形式,某对象没有适于人阅读的解释形式的话,str() 会返回与repr(),所以print展示的都是str的格式。
8.__setattr__():
可以设置函数属性,添加函数属性的规则。
def test():
def __setarr__(self,x,y):
if y >0:
object.__setarr__(self,x,True)
else:
object.__setarr__(self,x,False)
该函数可以设置特定规则。
9.__getattr__():
只有在没有找到对象属性的时候调用,