zoukankan      html  css  js  c++  java
  • 面向对象-其他方法

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

    class A:
        pass
    class B(A):
        pass
    b = B()
    print(isinstance(b,A)) #包括继承关系
    print(type(b) is A) #不包括继承关系
    结果:True
    结果:Flase

    issubclass() 判断类与类之间的关系

    class A:
        pass
    class B(A):
        pass
    b = B()
    print(issubclass(B,A))  #子级放在父级前面
    结果:True

    二.反射: 用字符串类型的变量名来访问这个变量的值

    反射的方法:getattr,hasattr,setattr,delattr

    命名空间 XXX == getattr(命名空间,'XXX')

    (1):类 静态属性,类方法,静态方法

    class Student:
        ROLE = 'STUDENT'
        @classmethod
        def check_course(cls):
            print('查看课程')
        @staticmethod
        def login()
            print('登录')
    #反射查看属性
    print(Student.ROLE)
    print(getattr(Student,'ROLE'))
    #反射调用方法
    getattr(Student,'check_course)()  #类方法
    getattr(Student,'login')() #静态方法

    hasattr 和 getattr 配合使用

    num = input('>>>')
    if hasattr(Student,num):   #判断输入的内容类中是否有,没有返回Flase,有返回True
        getattr(Student,num)()

    (2). 对象 :方法,对象属性

    class A():
        def __init__(self,name):
            self.name = name
        def func(self):
            print('in func')
    a =A('alex')
    print(a.name)
    print(getattr(a,'name'))
    getattr(a,'func')()

    (3) 模块

    import 模块
    getattr (模块,'名字')

    (4)自己文件

    import sys 
    getattr (sys.modules['__main__'],'名字')

    三.内置方法:

    __名字__  类中的特殊方法内置方法双下方法魔术方法

    类中的每一个双下方法都有它自己的特殊意义,没有需要从外部直接调用的,而是

    总有一些其他的 内置函数 特殊的语法 用来触发这些双下方法

    (1)__call__

    class A:
        def __call__(self,*args,**kwargs)
            print('执行call方法')
        def call(self)
            peint('执行call方法')
    a = A()
    a()  #对象()  相当于调用__call__方法
    A()() 相当于实例化得到一个对象,在对对象() 和上面的方法一样
    
    class B:
        def  __init__(self,cls):
            print('在实例化A之前做一些事情')
                self.a = cls()
                self.a()
                print('在实例化之后做一些事情')
    B(A)

    (2)__len__

    class My:
        def__init__(self,s)
            self.s = s
        def __len__(self)
            return len(self.s)
    my = my('abc')
    print(len(my))

    (3)__new__

    单例模式:

    如果一个类 从头到尾只能有一个实例,说明从头到尾之开辟了一块儿属于对象的空间,那么这个类就是一个单例类
    lass Single:
         __ISINCTANCE = None
         def __new__(cls, *args, **kwargs):
             if not cls.__ISINCTANCE:
                 cls.__ISINCTANCE = object.__new__(cls)
             return cls.__ISINCTANCE
         def __init__(self,name,age):
             self.name = name
             self.age = age

    (4)__str__

     class Student:
         def __str__(self):
             return '%s %s %s'%(self.school,self.cls,self.name)
    
        def __init__(self,name,stu_cls):
             self.school = 'oldboy'
             self.name = name
             self.cls = stu_cls
    
     he = Student('hezewei','py14')
     print(he)
     huang = Student('huangdongyang','py14')
     print(huang)
     print(str(he))   # 内置的数据类型,内置的类,相当于执行__str__
     print('学生1 : %s'%he)
  • 相关阅读:
    Power BI for Office 365(八)共享查询
    Power BI for Office 365(七) Power BI站点
    Power BI for Office 365(六)Power Map简介
    Power BI for Office 365(五)Power View第二部分
    Power BI for Office 365(四)Power View第一部分
    Power BI for Office 365(三)Power Pivot
    Power BI for Office 365(二)Power Query
    java 继承、重载、重写与多态
    Android 热修复方案Tinker(一) Application改造
    阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结
  • 原文地址:https://www.cnblogs.com/ITdong-1/p/9397966.html
Copyright © 2011-2022 走看看