1面向对象内置函数 2反射 3内置方法

Posted wjs521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1面向对象内置函数 2反射 3内置方法相关的知识,希望对你有一定的参考价值。

1、isinstance()    判断对象所属类型,包括继承关系

2、issubclass() 判断类与类之间的继承关系

  class A:pass

  class B(A): pass

  print(isinstance(b,B))   # o,t

  print(isinstance(b,A))  #  o,t

  

  class mystr(str): pass

  ms = mystr("alex")

  print(type(ms) is str)  # 不包含继承关系,只管一层

  print(isinstance("alex",str))  # 包含所有的继承关系

  

 

  class A: pass

  class B(A) : pass

   print(issubclass(B,A))

  print(issubclass(A,B))

  技术分享图片

3、反射

  用字符串数据类型的变量名来访问这个变量的值

  反射的方法:getattar,用于返回一个对象属性值      (类、静态属性、类方法、静态方法)命名空间.XXX == getattr(命名空间,“XXX”)

        hasattr,函数用于判断是否包含对应的属性

        setattr,用于设置属性值,该属性必须存在

        delattr,函数用于删除属性      

  技术分享图片

getattr(os,"rename")("init","__init__.py")  # == os.rename

反射自己模块中的内容, 找到自己当前文件所在的命名空间

def a():

  print("A")

def b():
  print("B")

import  sys  # 是一个模块,这个模块里的所有的方法都是和Python解释器相关的

# import  相当于导入了一个模块

sys.modules  # 这个方法,表示所有在当前这个Python程序中导入的模块

my_file = sys.modules["__main__"]

getattr(my_file,"a")()

getattr(my_file,"b")()

技术分享图片

反射

类名.名字

  getattr(类名,“名字”)

对象名.名字

  getattr(对象名,“名字”)

模块名.名字

  import  模块

  getattr(模块,“名字”)

自己文件.名字

  import  sys

  getattr(sys.modules["__main__"],"名字‘)

4、__名字__   # 例如:__init__  初始化方法

  类中的特殊方法、内置方法

  双下方法

  魔术方法

  类中的每个双下方法都有它自己的特殊意义

  __call__  相当于   对象()

  __len__   len(obj)

  __new__  特别重要    开辟内存空间的,类的构造方法    # 写一个单例类

  __str__  , str(obj) ,  "%s" % obj   ,  print(obj)

  所有的双下方法, 没有  需要你在外部直接调用的   而是总有一些其他的,内置函数,特殊的语法来自动触发这些双下方法

  技术分享图片

  技术分享图片

  __new__  # 构造方法

  __init__  # 初识方法

  class Single:

    def __new__(cls, *args, **kwargs):

      print("在new方法里")

      obj = object.__new__(cls)

      print("在new方法里",obj)

      return obj

    def __init__(self):

      print("在init方法里",self)

  obj = Single()

  single的new,single没有,只能调用object的new方法

  new方法在什么时候执行??

      在实例化之后,__init__之前先执行new来创建一块空间

5、单例

  如果一个类,从到尾只能有一个实例,说明从头到尾之开辟了一块属于对象的空间, 那么这个类就是一个单例类

  单例类

  class Single:

    __ISINSTANCE = None

    def __new__(cls,*args,**kwargs):

      if not cls.__ISINSTANCE:

        cls.__ISINSTANCE = object.__new__(cls)

      return cls.__ISINSTANCE

    def __init__(self,name,age):

      self.name = name

      self.age = age 

  s1 = Single("guo", 22)

  s2 = Single("wang",24)

  print(s1.name)

  print(s2.name)

  print(s1,s2)

 

  

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

以上是关于1面向对象内置函数 2反射 3内置方法的主要内容,如果未能解决你的问题,请参考以下文章

python学习8_1 面向对象(继承多态封装)以及零散概念(组合,property,绑定方法与非绑定方法,反射,内置函数)

面向对象之反射及内置方法

第二十五章 面向对象------封装内置函数反射动态导入

面向对象进阶:反射以及内置方法

Python学习第14篇:面向对象之反射以及内置方法

面向对象之反射及内置方法