python补充4
2024-09-06 04:25:05
一 如何判断一个对象是不是函数类型
#方法一
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>
最新文章
- Azure SQL Database (20) 使用SQL Server 2016 Upgrade Advisor
- ARM指令教程
- [js开源组件开发]ajax分页组件
- asp.net+mysq 数据库操作类
- javascript单元测试工具
- PHP redis负载均衡代码
- spring的三种注入方式
- 高性能动画!HTML5 Canvas JavaScript框架KineticJS
- iOS加载HTML, CSS代码
- 辛星跟您玩转vim第一节之vim的下载与三种模式
- //获取url中";?";符后的字串
- 企业必会技能 tomcat
- 理解 ASP.NET Web API 中的 HttpParameterBinding
- 分享一个用QT实现的Mjpeg-streamer客户端(简易版)
- 数据库MySQL5.7.21win64位安装配置
- python--numpy、pandas
- CentOS6.5编译安装Nginx1.8.1+MySQL5.5.48+PHP5.2.17+xcache3.2+ZendOptimizer-3.3.9
- poj 2777 线段树的区间更新
- 2018.07.28 uoj#164. 【清华集训2015】V(线段树)
- beautifulsoup之CSS选择器
热门文章
- PHP curl_multi_select函数
- OC学习篇之---循环引用问题
- VS2014:";64位调试操作花费的时间比预期要长";,无法运行调试解决办法
- sqlserver定时作业,定时执行存储过程
- 【C++第一个Demo】---控制台RPG游戏2【通用宏、背包类】
- HDU 1847 Good Luck in CET-4 Everybody! (巴什博弈)
- PAT甲级——A1152 GoogleRecruitment【20】
- 转 笔记本无线和有线的MAC地址修改
- 马士兵对话京东T6阿里P7(薪水):月薪5万,他为何要离职?
- Javascript中的相等比较