python复习过程遗漏知识

1、__call__就是一个重载了之后   对象实例可以拿来当做函数调用

例如:
class  Test:
     def  __init__(self,a):
        self.a = a
         pass
   
     def  __call__(self, b, c):
         print (  "call"  )
         return  self.a+b+c
temp = Test(  12 )
tempAndswer = temp(  12 ,  23 )
print  (tempAndswer)
call
47

可以看到Test类的实例temp可以当做函数调用call   temp(  12 ,  23 )


2、 __new__()

自定义 __new__() 方法一般并不常用,而且容易与 __init__() 相混淆。实际上这两个方法也确实相似,比如他们都是在创建类的实例时会被默认调用的方法,而且创建实例时传入的参数也都会传到这两个方法里。但他们也有很重要的区别,比如对 __new__() 的调用比 __init__() 要早,__new__() 有返回值,__init__() 木有。

来理一下创建类的实例的过程,即解释器处理 foo = MyClass() 这条语句的步骤的话,大约是这样的(可能并不完全准确):

  1. 创建 foo 这个名字
  2. 调用 MyClass 类的 __new__() 静态方法,返回一个类实例
  3. 将__new__() 返回的类实例赋值给 foo
  4. 这个实例被当做 self 参数传给 __init__(),以完成该实例的初始化工作





【一些问题】:
1、Python如何实现单例模式:
Python有两种实现单例模式的方法:
(1)利用__new__(cls,*args,**kwargs)
class  Singleton(object):
     def  __new__(cls, *args, **kwargs):
         if  not  hasattr(cls,  '_instance' ):
            orig = super(Singleton,cls)  #这里是调用父亲的__new__( cls,*args ,**kw)
            cls._instance = orig.__new__(cls,*args, **kwargs)
         return  cls._instance

class  MyClass(Singleton):
     pass

(2),共享属性;所谓单例就是所有引用(实例、对象)拥有相同的状态(属性)和行为(方法) 
#同一个类的所有实例天然拥有相同的行为(方法), 
#只需要保证同一个类的所有实例具有相同的状态(属性)即可 
#所有实例共享属性的最简单最直接的方法就是__dict__属性指向(引用)同一个字典( dict
#可参看:http://code.activestate.com/recipes/66531/ 
class  Borg(object): 
    _state = {} 
     def  __new__(cls, *args, **kw): 
        ob = super(Borg, cls).__new__(cls, *args, **kw) 
        ob.__dict__ = cls._state 
         return  ob 
 
class  MyClass2(Borg): 
    a =  1



2、什么是lambda函数?
g = lambda x,y:x+y
g(12,12)
(  lambda  x,y=  0  ,z= 0  :x+y+z)(  3 ,  5  , 6 


3、python是如何进行类型转换的?
int('123123')


4、python是如何进行内存管理的?
是由python解释器来负责的 
python内部使用引用计数来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建的时候就创建了一个引用计数
减少的情况:
(1)一个本地引用离开了它的作用域。比如上面的foo(x)函数结束,x指向的对象引用减1
(2)对象的别名被显示的销毁:del x
(3)一个对象的别名被赋值给其他对象:x=123
(4)list对象的减少  内容的引用计数也会跟着减少

【垃圾回收】:
它会去检查引用计数为0的对象  然后清除其在的内存的空间,当然除了引用计数为0的会被清除,还有一个情况也会被垃圾回收器清除 当两个对象互相引用时,而且没有其他的引用指向他们的时候
垃圾回收机制还有一个循环垃圾回收器,确保释放循环引用对象(a引用b,b引用a,导致其引用计数永远不为0)
python有内存池机制

【内存池机制】:
Python所有小于256字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc  另外Python对象,例如整数,浮点数和List 都有其独立私有的内存池对象间不共享他们的内存池  也就是如果你分配了大量的整数  用于缓存这些整数的内存就不能再分配给浮点数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值