python 类的特殊成员方法
__doc__ # 输出类的描述信息
__module__ # 表示当前操作的对象在那个模块
__class__ # 表示当前操作的对象的类是什么
__init__ # 构造方法,通过类创建对象是,自动触发执行。
__del__ # 构造方法,当对象在内存中释放是,自动触发执行。
__call__ # 对象后面加括号,触发执行
注:构造方法的执行是由创建对象触发的,即:对象 = 类名();而对于__call__方法的执行是由对象后加括号触发的,即:对象()或者类()()
__dict__ # 查看类或对象中的所有成员
__str__ # 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。
__getitem__ # 用于索引操作,如字典。表示获取数据
__setitem__ # 用于索引操作,如字典。表示设置数据
__delitem__ # 用于索引操作,如字典。表示删除数据
**__new__**
创建类的两种方法:
1.普通方法
class Foo(object):
def func(self):
print('hello world!')
2.特殊方法
def func(self):
print('hello world!')
Foo = type('Foo',(object),{'func':func})
# type第一个参数:类名
# type第二个参数:当前类的基类
# type第三个参数:类的成员
**__new__**
new负责函数实例化时的内存空间开辟。早于__ini__的执行。
**metaclass**
class Foo(object,metaclass=MyType)
**__new__,__init__,__call__的使用说明**
class Mytype(type): def __call__(self, *args, **kwargs): print('Mytype __call__') obj = self.__new__(self) self.__init__(obj, *args, **kwargs) return obj def __new__(cls, *args, **kwargs): print('Mytype __new__') obj = type.__new__(cls, *args, **kwargs) return obj def __init__(self,*args,**kwargs): print('Mytype __init__') class Foo(object,metaclass=Mytype): def __init__(self,name): print('Foo __init__') self.name = name f = Foo('helei') print(f.name)
说明:
首先你需要知道一下几点:
- python中一切接对象。(平时所说的对象和实例都是对象)
- __init__的作用是初始化函数属性作用是
- __new__的作用是生成对象的内存空间并返回
- __call__的作用是对象(或者可以说是实例)后面加括号,触发执行