什么是魔术方法?
在Python中,所有以“__”(双下划线)包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,例如类的初始化方法 __init__ 就是一个魔术方法。本篇文章将主要介绍几个常用的魔术方法的功能以及使用。
1.特殊属性
Python中有几个比较容易理解的魔术方法,是类里面固有的几个特殊属性,总结如下表:
魔术方法名称 |
功能 |
__name__ |
类、函数、方法等的名字 |
__module__ |
类定义所在的模块 |
__class__ |
对象或类所属的类 |
__bases__ |
当前类的基类(父类) |
__doc__ |
类、函数的文档帮助,没有定义为None |
__mro__ |
Method Resolution Order 方法解析顺序 |
__dict__ |
类或实例的属性,可写的字典 |
下面编写一个简单的程序,看一下分别是怎么使用的:
from collections import Counter
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__)
print(Counter.__module__)
# 对象或类所属的类: 是由哪个类实例化出来的;
d = Date(2019, 10, 10)
print(d.__class__) # d对象是由Date类实例化出来的;
print(Date.__class__) # type(1)Date类是由type类实例化出来的; Python中一切皆对象; 看到的类实质上也是对象;
# 当前类的基类(父类)
print(Date.__bases__)
print(A.__bases__)
print(object.__bases__) # object没有父类;
# 类、函数的文档帮助,没有定义为None
print(Date.__doc__)
# Method Resolution Order 方法解析顺序, 实质上是显示类的继承顺序; python3中多继承的算法是广度优先
print(Date.__mro__)
# 类或实例的属性,可写的字典
print(Date.__dict__)
输出结果如下: