zoukankan      html  css  js  c++  java
  • 【我要学python】MethodType和isinstance和Type函数

    一.首先来看isinstance:

    a=6
    
    isinstance(a,int)   #返回Ture
    
    isinstance(a,str)   #返回False
    
    isinstance (a,(str,int,list))    # 是元组中的一个返回 True
    

     二.接下来看Type函数:

    type(666) == int #返回 Ture
    
    type(666) == list #返回False
    
    type({"w":"1","q":"2"})==dict  #返回 Ture
    
    type([1,2,3])==list  #返回 Ture
    

     三.再而来看两者区别:

     1 class A:
     2     pass
     3 class B(A):         #B类继承A类
     4     pass
     5 
     6 isinstance(A(),A) #ture
     7 
     8 type(A())==A #ture
     9 
    10 isinstance(B(),A) #ture
    11 
    12 type(B())==A #false
    • type() 不会认为子类是一种父类类型,不考虑继承关系。

    • isinstance() 会认为子类是一种父类类型,考虑继承关系。

    四.MethodType函数

    from types import MethodType 
    #创建一个方法
    def set_age(self, age):
        self.age = age    
    #创建一个类    
    class Student(object):
        pass
    #以上为公共代码
    
    
    s_out = Student()

    #创建一个外部的set_age方法链接到Student内 #将set_age方法绑定到对象s_out上 #MethodType第一个参数是绑定的方法 #第二个是绑定的对象 #第三个是绑定的类名可以忽略
    s_out.set_age = MethodType(set_age,s_out,Student) #调用方法 s_out.set_age(666) #返回值为 666 print s_out.age #错误示范 没有把方法绑定到对象 导致错误 s_wrong = Student() s_wrong.set_age(100) print s_wrong.age
    #将set_age方法绑定到类Student上
    Student.set_age    =    MethodType(set.age,None,Student)
    
    s1=Student()
    s2=Student()
    
    s1.set_age(666)
    s2.set_age(777)
    
    print s1.age
    print s2.age
    
    #返回值为666 777 成功调用
    
    #如果在绑定的时候第二个参数没有写None的话 s2属性就会覆盖s1 只输出777
  • 相关阅读:
    Android使用百度地图定位并显示手机位置后使用前置摄像头“偷拍”
    JS传递参数时对中文进行编码和解码
    点击<a>标签,禁止页面自动跳到顶部的解决办法
    百度地图API用法(传地址)
    asp.net页面按Enter键IE不提交表单
    asp.net同时调用JS和后台的无效的解决
    QQ浏览器不支持JS问题
    html中opacity的使用
    c#中传递参数前加out
    IE下使用jquery ajax失效
  • 原文地址:https://www.cnblogs.com/tqing/p/10192555.html
Copyright © 2011-2022 走看看