python常见魔法方法

魔法方法

__doc__

  • 表示类的描述信息

    class A(object):
      """描述类信息"""
      pass
    
    print(A.__doc__)

__module__和__class__

  • __module__表示当前操作的对象在那个模块
  • __class__表示当前操作的对象的类是什么

__dict__

  • 类或对象中的所有属性

__init__

  • 初始化方法,通过类创建对象时,自动触发执行

__new__

  • 创建实例对象

__new__和__init__方法详细请看:
https://blog.csdn.net/lb786984530/article/details/81193043

__del__

  • 当对象在内存中没有引用,被释放时,自动触发执行

__str__

  • 如果一个类中定义了__str__方法,那么在打印对象时,默认输出该方法的返回值

__call__

  • 对象后面加括号,触发执行
  • __init__方法的执行时由创建对象触发的,即:对象 = 类名();
  • 而对于__call__方法的执行是由对象后加括号触发的,即:对象() 或者 类(…)()

__getitem__、__setitem__、__delitem__

  • 用于索引操作,如字典。以上分别表示表示获取、设置、删除数据。
# -*- coding:utf-8 -*-

class Foo(object):

    def __getitem__(self, key):
        print('__getitem__', key)

    def __setitem__(self, key, value):
        print('__setitem__', key, value)

    def __delitem__(self, key):
        print('__delitem__', key)


obj = Foo()

result = obj['k1']      # 自动触发执行 __getitem__
obj['k2'] = 'laowang'   # 自动触发执行 __setitem__
del obj['k1']           # 自动触发执行 __delitem__

__getslice__、__setslice__、__delslice__

  • 该三个方法用于分片操作,如:列表
# -*- coding:utf-8 -*-

class Foo(object):

    def __getslice__(self, i, j):
        print('__getslice__', i, j)

    def __setslice__(self, i, j, sequence):
        print('__setslice__', i, j)

    def __delslice__(self, i, j):
        print('__delslice__', i, j)

obj = Foo()

obj[-1:1]                   # 自动触发执行 __getslice__
obj[0:1] = [11,22,33,44]    # 自动触发执行 __setslice__
del obj[0:2]                # 自动触发执行 __delslice__

你可能感兴趣的:(python)