zoukankan      html  css  js  c++  java
  • python补充4

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

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

     二 关于__new__方法和 __init__方法

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

    1 先看一个简单的例子

    class Foo(object):
    
        def __init__(self,a1):
            print(a1) #123
            self.a=a1
    
    obj=Foo(123)  #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) #123
            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>

  • 相关阅读:
    python接口自动化-json数据处理
    Fiddler-抓取手机app请求
    monkey常用命令实例
    python接口自动化-Cookie_绕过验证码登录
    python接口自动化-session_自动发文
    python接口自动化-post请求4
    python接口自动化-post请求3
    Python学习笔记第十五周
    Python学习笔记第十四周
    Python学习笔记第十二周
  • 原文地址:https://www.cnblogs.com/mmyy-blog/p/10856845.html
Copyright © 2011-2022 走看看