内容概要

  1.   特殊成员
  2.  反射
  3.  configparser模块
  4.  hashlib模块
  5.  logging模块
  6.  异常处理
  7.  模块
  8.  包

 

1. 特殊成员

什么是特殊成员呢? __init_()就是个特殊的成员. 带双下划线的都是特殊方法. 这些方法在特殊的场景的时候会被自动的执行. 比如
  1. 类名() 会自动执行__init__()
  2. 对象() 会自动执行__call__()
  3. 对象[key] 会自动执行__getitem__()
  4. 对象[key] = value 会自动执行__setitem__()
  5. del 对象[key] 会自动执行 __delitem__()
  6. 对象+对象 会自动执行 __add__()
  7. with 对象 as 变量 会自动执行__enter__ 和__exit__
  8. 打印对象的时候 会自动执行 __str__
  9. 干掉可哈希 __hash__ == None 对象就不可哈希了.

 

 

创建对象的真正步骤:

首先, 在执行类名()的时候. 系统会自动先执行__new__()来开辟内存. 此时新开辟出来的内存区域是空的. 紧随其后, 系统自动调用__init__()来完成对象的初始化⼯作. 按照时间轴来算.

  1. 加载类
  2. 开辟内存(__new__)
  3. 初始化(__init__)
  4. 使用对象干xxx

类似的操作还有很多很多. 我们不需要完全刻意的去把所有的特殊成员全都记住. 实战中也用不到那么多. 用到了查就是了.

 

单例模式:

class Foo(object):

    _instance = None # 实例

    # 先
    def __new__(cls, *args, **kwargs):
        if Foo._instance == None:
            Foo._instance = object.__new__(cls) # 开辟内存
        return Foo._instance

    # 后
    def __init__(self):
        print("我是一个简单的__init__")


f1 = Foo() # 第一步先执行__new__分配内存, 第二步执行__init__初始化这段内存
f2 = Foo()
print(f1)
print(f2)
View Code

相关文章: