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)
  • 相关阅读:
    mysql中json_extract函数的使用?作用是什么?
    python 里面的单下划线与双下划线的区别(私有和保护)
    理解Python的双下划线命名
    python list中append()与extend()用法
    sqlalchemy(二)高级用法 2
    查看python对象的属性
    python map()
    SpringMVC学习系列(3) 之 URL请求到Action的映射规则
    SpringMVC学习系列(2) 之 经典的HelloWorld实现
    SpringMVC学习系列(1) 之 初识SpringMVC
  • 原文地址:https://www.cnblogs.com/ITdong-1/p/9397966.html
Copyright © 2011-2022 走看看