类的内置特殊方法和属性:
1.__init__(self):构造函数
2.__del__(self):析构函数
3.__new__(cls):
__new__必须有一个cls参数,代表要实例化的类。
必须有返回值,返回的是实例化出来的对象,可以调用父类的__new__,也可以通过object.__new__创建返回的对象
#__new__在init前调用
class Tiger(object):
def __init__(self,name):
print("Tiger_init")
self.name = name
def __new__(cls, *args, **kwargs):
print("new_start")
#实际上可以发现如果不返回object的new,那么并不会调用init
return object.__new__(cls)
tt = Tiger("Tom")
4.__call__(self)
如果一个类定义了__call__方法,那么该类的实例会变成可调用,既实例可以加上()调用,调用的结果既__call__中的操作
5.__str__(self)
自定义打印实例时的返回值
class A(object):
def __init__(self):
pass
# def __str__(self):
# return "我是自定义返回值"
a = A()
print(a)
如果没有定义__str__,打印的值是a的内存地址,如果定义了__str__,打印的便是__str_的返回值
__str_的一个实际运用便是自定义异常,https://www.cnblogs.com/Hexdecimal/p/9364477.html
6.__getitem__(self,key)、__setitem__(key,value)、__delitem__(key)
通过上面三个特殊方法,可以通过字典的形式向实例中添加、删除一系列的变量
通过这种方式添加的变量,实际上是存储在实例的一个数据字典类型的实例变量中,具体地赋值、取值、删除通过三个特殊函数对数据字典进行处理,所以类的构造函数中必须定义一个数据字典类型的实例变量。
class Sample(object):
def __init__(self):
self.data = {}
def __getitem__(self, item):
return self.data.get(item)
def __setitem__(self, key, value):
self.data[key] = value
def __delitem__(self, key):
self.data.pop(key)
S = Sample()
S["name"] = "tiger"#set
print(S["name"])#get
del S["name"]#del
7.__doc__,既自定义在类头部的描述信息
8.__module__,当前类属于哪个模块
9.__class__,当前对象属于哪个类
10.__dict__
以字典的形式返回类或者实例的所有方法和属性,
如果是通过实例调用则返回实例属性,
如果是通过类名调用则返回类属性和方法