python常用魔法方法
在python中有一些方法被称之为魔法方法,在对对象进行操作的时候会自动调用。
__doc__
• 查看说明文档
class FirstClass(object):
"""我是说明文档"""
pass
print(FirstClass.__doc__)
__mudule__
• 查看类所属模块
• 从下代码结果可以知道,FirstClass在main主程序中
• 如果是从别的模块导入,如下所示从pandas导入的DataFrame类属于pandas.core.frame模块
import pandas as pd
class FirstClass(object):
"""我是说明文档"""
pass
print(FirstClass.__module__)
print(pd.DataFrame.__module__)
__class__
• 查看对象属于什么类,如下,FirstClass属于type类
class FirstClass(object):
"""我是说明文档"""
pass
print(FirstClass.__class__)
__call__
• 使类的实例化可以被调用
class FirstClass(object):
pass
first = FirstClass()
first()
class FirstClass(object):
def __call__(self):
return 666
first = FirstClass()
print(first())
__new__和__init__
• new方法用于继承基类的时候创建子类
• init方法用于实例化的时候初始化方法
• 如下所示,实例化的时候先调用了new方法,传入的cls表示FirstClass本身
• 然后初始化了self.phone属性,传入的self表示实例对象本身
• first这个对象属于tuple类
class FirstClass(tuple):
def __new__(cls):
print("我要创建一个tuple类!!!")
return super().__new__(cls)
def __init__(self):
print("我要初始化一个tuple实例!!")
self.phone = 110
first = FirstClass()
print(isinstance(first, tuple))
print(first.phone)
__del__
• 在对象被回收或者删除的时候自动调用,又成为析构方法
class FirstClass(tuple):
def __new__(cls):
print("我要创建一个tuple类!!!")
return super().__new__(cls)
def __init__(self):
print("我要初始化一个tuple实例!!")
self.phone = 110
def __del__(self):
print("我要被干掉了!!!")
first = FirstClass()