一.常见魔术方法
name | 类,函数,方法等的名字 |
---|---|
module | 类定义所在的模块 |
class | 对象或类所属的类 |
bases | 当前类的基类(父类) |
doc | 类,函数的文档帮助,没有定义为None |
mro | Method Resolution Order 方法解析顺序 |
dict | 类或实例的属性,可写的字典 |
举例:
class A(object):
pass
class C(object):
pass
class Date(A, C):
Country = 'china'
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
print(Date.__name__)
# 类定义所在的模块, 如果在当前脚本, 返回__main__, 否则, 返回真实的模块名eg: collections
print(Date.__module__)
# 对象或类所属的类: 是由哪个类实例化出来的;
d = Date(2019, 10, 10)
print(d.__class__) # d对象是由Date类实例化出来的;
print(Date.__class__) # type(1)Date类是由type类实例化出来的
# 当前类的基类(父类)
print(Date.__bases__)
print(A.__bases__)
print(object.__bases__) # object没有父类;
查看结果:
二.创建,初始化,销毁
创建__new__:new的功能是在生成对象之前所作的动作,接收的参数是cls类,负责对象的创建
初始化__init__:init是在对象生成完成之后完善对象的属性,接收的是self对象,负责对象的初始化
销毁(删除):del:del删除一个对象,python中不管是手动调用还是自动回收都会调用该方法
class Student(object):
def __new__(cls, name):
print('正在new.....')
# 不知道new方法试药干吗的, 直接返回父类的new方法
return super(Student, cls).__new__(cls)
# 初始化(构造)方法: 创建对象时自动执行
def __init__(self, name):
print("正在初始化对象.....")
self.name = name
# 析构方法: 对象删除时自动调用
def __del__(self):
print("正在删除对象.....")
# 当程序运行结束之后, 会自动释放变量信息. 会自动调用析构方法;
s = Student('westos')
print(s.name)
#此处手动调用
del s
#print(s.name)
查看结果:可以看到new方法先执行,最后手动调用del方法,即删除实例对象s
三.str__与__repr
str__与__repr 是在类(对象)中对类(对象)本身进行字符串处理。
通过例子了解其用法:
class Student(object):
# 初始化(构造)方法: 创建对象时自动执行
def __init__(self, name):
print("正在初始化对象.....")
self.name = name
s = Student("westos")
print(s)
class Student(object):
# 初始化(构造)方法: 创建对象时自动执行
def __init__(self, name):
print("正在初始化对象.....")
self.name = name
# 如果没有__str__, 自动返回__repr__的内容
# 对象的字符串打印
def __str__(self):
return "" %(self.name)
# 在交互式python环境中产生作用
def __repr__(self):
return self.name
s = Student("westos")
print(s)
使用str与repr时,可以友好显示字符串:
四.类型转换的魔术方法
__int__ | 转换成整型 |
---|---|
__long__ | 转换成长整型 |
__float__ | 转换成浮点型 |
__complex__ | 转换成复数 |
__oct__ | 转换成八进制 |
__hex__ | 转换成十六进制 |
__index__ | 如果定义了一个可能被用老做切片的数值型 |
__trunc__ | 当math.truc(self)使用时被调用__trunc__f返回自身类型的整形截取 |
__coerce__ | 执行混合类型的运算 |