• 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)

      

     6、__str__

      class Student:

        def __str__(self):

          return "%s %s %s" % (self.school,self.cls,self.name)

        def __init__(self,name,stu_cls):

          self.school = "huifeng"

          self.name = name

          self.cls = stu_cls

      stu = Student("guoxuxu","highschool")

      print(stu)

      print(str(stu))  # 内置的数据类型,内置的类,相当于执行__str__

      print("学生:%s" % stu)

      print  一个对象相当于调用一个对象的__str__方法

      str(obj)  相当于执行obj.__str__方法

      "%s" % obj  相当于执行obj.__str__方法

       

  • 相关阅读:
    【YbtOJ#20238】最优路线
    【洛谷P3247】最小公倍数
    【洛谷P3261】城池攻占
    【YbtOJ#20236】红点蓝点
    【YbtOJ#20235】公共序列
    Wing IDE 4.1使用笔记一修正一下框框字体显示不了中文
    飘逸的python
    The 12th tip of DB Query Analyzer, powerful in text file process
    PHP网站如何解决大流量与高并发的问题
    【python】利用sftp及rsa密匙实现远程拷贝文件
  • 原文地址:https://www.cnblogs.com/wjs521/p/9393280.html
Copyright © 2020-2023  润新知