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>

  • 相关阅读:
    scrapy框架(一)
    selenium爬取京东商品信息
    自动化测试工具selenium的使用
    xpath选择器的使用
    爬取网页数据实例
    爬虫实操
    爬虫之`beautifulsoup4`模块
    DNS学习笔记
    MongoDB集群部署
    MongoDB单机部署
  • 原文地址:https://www.cnblogs.com/mmyy-blog/p/10856845.html
Copyright © 2011-2022 走看看