zoukankan      html  css  js  c++  java
  • issubclasss/type/isinstance/callable/super

    issubclass() :

      方法用于判断第一个参数是否是第二个参数的子子孙孙类。

    语法:issubclass(sub, super)
    
    检查sub类是否是 super 类的派生类
    
    class A:
         pass
    
    class B(A):
        pass
    
     print issubclass(B,A)
    type() 
      
    给你一个参数,判断对象是不是由某一个指定类? --> type(obj) == Foo
    class Foo(object):
        pass
    
    class Bar(object):
        pass
    
    def func(*args):
        foo_counter =0
        bar_counter =0
        for item in args:
            if type(item) == Foo:
                foo_counter += 1
            elif type(item) == Bar:
                bar_counter += 1
        return foo_counter,bar_counter
    
    # result = func(Foo(),Bar(),Foo())
    # print(result)
    
    v1,v2 = func(Foo(),Bar(),Foo())
    print(v1,v2)
    实例

    isinstance()

      来判断一个对象是否是一个已知的类型,类似 type()。

    class Base(object):
        pass
    
    class Foo(Base):
        pass
    
    obj1 = Foo()
    print(isinstance(obj1,Foo))  
    print(isinstance(obj1,Base))
    实例

    callable()

       1,用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。

      2,对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。

      3.,类对象都是可被调用对象,类的实例对象是否可调用对象,取决于类是否定义了__call__方法。

    >>> class A: #定义类A
    pass

    >>> callable(A) #类A是可调用对象
    True
    >>> a = A() #调用类A
    >>> callable(a) #实例a不可调用
    False
    >>> a() #调用实例a失败
    Traceback (most recent call last):
    File "<pyshell#31>", line 1, in <module>
    a()
    TypeError: 'A' object is not callable


    >>> class B: #定义类B
    def __call__(self):
    print('instances are callable now.')


    >>> callable(B) #类B是可调用对象
    True
    >>> b = B() #调用类B
    >>> callable(b) #实例b是可调用对象
    True
    >>> b() #调用实例b成功
    instances are callable now.

    super--主动调用其他类的方法:

    class Base:
    
        def f1(self):
            print('5个功能')
    
    class Foo:
    
        def f1(self):
            print('3个功能')
            Base.f1(obj)
    
    obj = Foo()
    obj.f1()
    方法1
    class Foo:
        def f1(self):
            super().f1()
            print('3个功能')
    
    class Bar(object):
        def f1(self):
            print('6个功能')
    
    class Info(Foo,Bar):
        pass
    
    obj = Info()
    obj.f1()
    结果:
    6个功能
    3个功能
    #super()是从当前位置找他的下一个方法
    方法2
     
  • 相关阅读:
    Lock VS Monitor
    vue+element-ui路由配置相关
    数字与金额数字转换的正则表达式
    vue项目中多个入口的配置
    编写项目readme文件
    在vue中使用express-mock搭建mock服务
    编辑器——vscode
    【转】论前端的工程化
    vue学习
    node+express+http-proxy-middleware做代理
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/9571216.html
Copyright © 2011-2022 走看看