Skip to content

Latest commit

 

History

History
60 lines (54 loc) · 3.1 KB

note.md

File metadata and controls

60 lines (54 loc) · 3.1 KB

python笔记

  1. python中可变类型和不可变类型
    不可变类型:int,string,float,tuple
    可变类型:dict,list
  2. python 中路径操作相关的函数
    import os
  3. python 新式类和经典类区别
    • 定义方式不同,经典类没有继承的类,如果经典类被作为父类,子类调用父类的构造函数时就会报错
    • 新式类每个类都继承一个基类,如果什么都不想继承就继承object,如果想用super调用父类的构造函数,那只能使用新式类
    • 新式类对象可以直接通过__class__属性获取自身类型:type
    • 继承搜索的顺序发生了改变,经典类多继承数学搜索顺序:
      • 深度优先-->先深入继承树左侧,再返回,开始找右侧;
      • 新式类多继承属性搜索顺序:广度优先遍历:先水平搜索,然后再向上移动
    • 新式类增加了__slots__内置属性,可以把实例属性的种类锁定到__slots__规定的范围之中
      • eg:
        class A(object):
            __slots__ = ('name','age')
        class A1():
            __slots__ = ('name','age')
        a1 = A1()
        a = A()
        a1.name1 = 'a1'
        a.name1 = 'a'
        • A是新式类添加了__slots__属性,所以只允许添加name age
        • A1是经典类__slots__属性没用
      • 通常每一个实例都会有一个__dict__属性,用来记录实例中所有的属性和方法,也是通过这个字典,可以实例绑定任意的属性
      • __slots__属性作用就是,当类C有比较少的变量,而且拥有__slots__属性时,类C的实例就没有__dict__属性,而是把变量的值存在一个固定的地方。如果试图访问一个__slots__中没有的属性,实例就会报错
      • 好处: __slots__属性令实例失去了绑定任意属性的遍历,但是因为每一个实例没有__dict__属性,却能有效 节省 每一个实例的 内存消耗,有利于生成小而精干的实例
    • 新式类增加了**getattribute**方法
      •   class A(object):    
              def __getattribute__(self, *args, **kwargs):    
                  print "A.__getattribute__"  
                  
              
          class A1():    
              def __getattribute__(self, *args, **kwargs):    
                  print "A1.__getattribute__"  
                  
              
          a1 = A1()  
          a = A()  
          
          a.test  
          print "========="  
          a1.test
        •   A.__getattribute__  
            =========  
            Traceback (most recent call last):  
            File "t.py", line 18, in <module>  
                a1.test  
            AttributeError: A1 instance has no attribute 'test'
    • Python 2.x 中默认都是经典类,只有显式继承了object才是新式类
    • Python 3.x中默认都是新式类,不必显式的继承object