Python:魔法函数

1. 简介

1.1. 什么是魔法方法

  • Python是一门追求简单、高效的语言,它并不像某些语言如Java、C++等,需要让类实现接口并逐一实现接口中的方法。Python采用了一种约定的机制,在基类中以特殊名称的方法、属性(类似 __ init __ 这样的属性和方法)来提供指定的功能;
  • 在Python中有些方法名、属性名前后加上了双下划线,这种方法、属性通常属于Python类的特殊方法和属性,有的书中成为“魔法方法”;

1.2. 调用方式

  • 隐式调用
    -- 魔法方法是 隐式调用 的,在使用的时候不需要调用方法
  • 显示调用
    --

2. 简单实例

  • __ init __(self, [...])
    -- 类的初始化方法。它获取任何传给构造器的参数(比如我们调用 x = SomeClass(10, ‘foo’) , init 就会接到参数 10 和 ‘foo’ ,init 在Python的类定义中用的最多;
  • __ getitem __(self, key)
    -- 定义对容器中某一项使用 self[key] 的方式进行读取操作时的行为。这也是可变和不可变容器类型都需要实现的一个方法;
  • 示例:
class Compalny(object):
    # 类的初始化方法,获取参数 employee_list 这个列表
    def __init__(self, employee_list):
        self.employee = employee_list

    # 对 self.employee 这个 list 使用 self[key] 的方式进行读取操作
    def __getitem__(self, item):
        return self.employee[item]

company = Compalny(["tom", "bob", "jane"])

# 遍历 company 中所有员工
for em in company:
    print(em)

print('=' * 50)

# 获取 company 中的第三个元素
print(company[2])

3. 常用魔法方法

  • 常用魔法方法
    -- __ init __:类实例化会触发;
  • __ repr __
    -- 和 __ init __(self) 的性质一样,Python 中每个类都包含 __ repr __() 方法,因为 object 类包含 __ reper __() 方法,而 Python 中所有的类都直接或间接继承自 object 类;
    -- 示例:
>>> class User():
...     def __init__(self, name):
...         self.name = name
...     def __repr__(self):
...         return "user with name : "+ self.name
...
>>> user = User(name="zhangsan")
>>> print(user)
user with name : zhangsan      # 自动打印出 __repr__ 方法 return 的文字 

-- __ str __:打印对象会触发;
-- __ call __:对象()触发,类也是对象 类(),类的实例化过程调用元类的call
-- __ new __:在类实例化会触发,它比init早(造出裸体的人,init穿衣服);
-- __ del __:del 对象,对象回收的时候触发;
-- __ setattr __ , __ getattr __:(.拦截方法),当对象.属性--》赋值会调用setattr,如果是取值会调用getattr;
-- __ getitem __ , __ setitem __:([]拦截);
-- __ enter __ 和 __ exit __ 上下文管理器;

你可能感兴趣的:(Python:魔法函数)