一、概述
前面我们讲了类的方法,有普通方法,就是我们自己定义的方法,还有静态方法,类方法,属性方法,
其实还有另一类方法,叫做类的特殊成员方法
二、类的特殊成员方法
2.1 __doc__ ,表示类的描述信息
class Dog(object):
'''
dog class #__doc__ 就是打印这里的信息
'''
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
d=Dog("niubi")
print(d.__doc__)
-----输出----
dog class
2.2 __module__和__class__
说明:
作用:当多次引用的时候,查看是从哪里导入的。没啥卵用
__module__: 表示当前操作的对象在哪个模块
__class__:表示当前操作的对象的类是什么
2.3 __init__
说明:构造方法,通过类创建对象时,自动触发执行
2.4 __del__
说明:析构方法,当对象在内存中被释放时,自动触发执行
2.5__call__
class Foo(object):
def __init__(self):
self.name = "nb"
def __call__(self, *args, **kwargs): # 重写call方法
print("running call", args, kwargs)
f = Foo() # 执行__init__
f(1, 2, 3, name="nb") # 执行call方法,也可以写成 Foo()(1,2,3,name="nb")
---
running call (1, 2, 3) {'name': 'nb'}
2.6__dict__ ,挺有用
类.__dict__ 查看类中所有方法成员
class Dog(object):
'''
dog class
'''
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
def eat(self,food):
print("%s is eating %s" %(self.name,food))
def age(self,age):
self.age=age
def sex(self):
return self.__sex
d=Dog("NIUBI")
print(Dog.__dict__)
=======
{'__module__': '__main__', '__doc__': '\n dog class\n ', '__init__': , 'walk': , 'eat': , 'age': , 'sex': , '__dict__': , '__weakref__': }
实例.__dict__ :打印出类中所有属性,不包括类属性。
class Dog(object):
'''
dog class
'''
class_shuxing="hehe" #这个类属性没有被打印出来
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
def eat(self,food):
print("%s is eating %s" %(self.name,food))
def age(self,age):
self.age=age
def sex(self):
return self.__sex
d=Dog("NIUBI")
#print(Dog.__dict__)
print(d.__dict__)
==============
{'name': 'NIUBI', 'age': None, '_Dog__sex': None}
#不包括类属性
2.7 __str__ ,
如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值 ,据说 Djiango 中很长用,以后详解
class test(object):
def __init__(self,name):
self.name=name
def __str__(self):
return "".format(self.name)
d=test("hehe")
print(d)
--------------
2.8 __getitem__、__setitem__、__delitem__
说明:用于索引操作,如字典。以上分别表示获取、设置、删除数据
作用:据说可以用类封装一些东西,然后暴露给用户一个字典,在类中控制用户对字典操作的权限。
class test(object):
def __getitem__(self, item):
print("getitem",item)
def __setitem__(self, key, value):
print("setitem",key,value)
def __delitem__(self, key):
print("delete",key)
t=test()
t["name"]
t["name"]="nb"
del t["name"]
-----------------
getitem name
setitem name nb
delete name #注:这边的__delitem__没有做真正的删除,只是触发这个方法,想要真正删除,只需要在__delitem__函数中添加删除功能即可