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
  • 相关阅读:
    C++ const
    facebook hacker cup 2013资格赛第二题
    最大全1子矩阵
    java HashMap的keyset方法
    树状数组
    Java entry
    一个数学证明:1(1x1)(1x2)...(1xn)<=x1+x2+...+xn, xi在[0,1]
    传教士野蛮人过河问题python
    在cmd中为命令设置别名以及启动cmd时自动执行bat
    合取Λ,析取V,容易记混吗?
  • 原文地址:https://www.cnblogs.com/tqing/p/10192555.html
Copyright © 2011-2022 走看看