一 如何判断一个对象是不是函数类型

#方法一
def func(arg):
if callable(arg):
print("是函数"+arg())
else:
print(arg) func() #
func(lambda : "") #是函数666

方法二
import types
def func(arg):
if isinstance(arg,types.FunctionType):
print("是函数"+arg())
else:
print(arg) func()
func(lambda : "")

二 关于__new__方法和 __init__方法

我们知道对一个类加上括号就是实例化一个对象,那么,new和init方法有什么先后吗

1 先看一个简单的例子

class Foo(object):

    def __init__(self,a1):
print(a1) #
self.a=a1 obj=Foo() #123
print(obj) #<__main__.Foo object at 0x00000184FFEC8908> 结果:

123
<__main__.Foo object at 0x00000184FFEC8908>

分析:一个类的实例化首先找到__new__方法,在这里我们没有写,因此它会去找它的父类的__new__方法,它返回的是对象,之后对对象进行构造

2 对 __new__方法进行重写

class Foo(object):

    def __init__(self,a1):
print(a1) #
self.a=a1 def __new__(cls,*args,**kwargs):
# return 'hhhh'
pass 结果:None
分析:先执行new方法,这里为空,就返回为None,为其他字符时,返回其他字符,init的方法没有执行

3 重写返回对象

class Foo(object):

    def __init__(self,a1):
print(a1) #123 ----
self.a=a1 def __new__(cls, *args, **kwargs):
#根据类创建对象
#执行返回值的构造方法 __init__
print(cls) #<class '__main__.Foo'> --这里先执行,还是类
return object.__new__(cls)
obj=Foo(123)
print(obj) #<__main__.Foo object at 0x0000020899B48908>
结果:

<class '__main__.Foo'>
123
<__main__.Foo object at 0x0000020899B48908>

最新文章

  1. Azure SQL Database (20) 使用SQL Server 2016 Upgrade Advisor
  2. ARM指令教程
  3. [js开源组件开发]ajax分页组件
  4. asp.net+mysq 数据库操作类
  5. javascript单元测试工具
  6. PHP redis负载均衡代码
  7. spring的三种注入方式
  8. 高性能动画!HTML5 Canvas JavaScript框架KineticJS
  9. iOS加载HTML, CSS代码
  10. 辛星跟您玩转vim第一节之vim的下载与三种模式
  11. //获取url中&quot;?&quot;符后的字串
  12. 企业必会技能 tomcat
  13. 理解 ASP.NET Web API 中的 HttpParameterBinding
  14. 分享一个用QT实现的Mjpeg-streamer客户端(简易版)
  15. 数据库MySQL5.7.21win64位安装配置
  16. python--numpy、pandas
  17. CentOS6.5编译安装Nginx1.8.1+MySQL5.5.48+PHP5.2.17+xcache3.2+ZendOptimizer-3.3.9
  18. poj 2777 线段树的区间更新
  19. 2018.07.28 uoj#164. 【清华集训2015】V(线段树)
  20. beautifulsoup之CSS选择器

热门文章

  1. PHP curl_multi_select函数
  2. OC学习篇之---循环引用问题
  3. VS2014:&quot;64位调试操作花费的时间比预期要长&quot;,无法运行调试解决办法
  4. sqlserver定时作业,定时执行存储过程
  5. 【C++第一个Demo】---控制台RPG游戏2【通用宏、背包类】
  6. HDU 1847 Good Luck in CET-4 Everybody! (巴什博弈)
  7. PAT甲级——A1152 GoogleRecruitment【20】
  8. 转 笔记本无线和有线的MAC地址修改
  9. 马士兵对话京东T6阿里P7(薪水):月薪5万,他为何要离职?
  10. Javascript中的相等比较