zoukankan      html  css  js  c++  java
  • 面向对象之内置方法

    标签(空格分隔): 内置方法


    面向对象里的内置方法:

    一、isinstance(obj,cls)和issubclass(sub,super)

    • isinstance(obj,cls)检查是否obj是否是类cls的对象;
      例如:
    class Foo(object):
        pass
    obj=Foo()
    isinstance(obj,Foo)
    
    • issubclass(sub,super)检查sub类是否是super类的派生类
      例如:
    class Foo(object):
        pass
    class Bar(Foo):
        pass
    issubclass(Bar,Foo)
    

    说一些主要的内置方法:

    item系列:

    查看属性

    class Foo:
        def __init__(self,name):
            self.name=name
            
        def __getitem__(self,item):#获取对象的属性的内置方法,item='name'
            return self.__dict__.get(item)
            
        def __setitem__(self,key,value):
            print(key,value)
        def __delitem__(self,key):
            print(key)
            
    obj=Foo('egon')
    print(obj.__dict__)
    #以前获取属性通过如下的代码:
    obj.属性名字
    #现在获取属性,item系列就是把obj模拟成字典形式,来访问
    obj['name']#自动触发了__getitem__自动触发
    

    设置属性

    现在如果要设置属性呢?比如我们要设置:obj['sex']='male'只要这样设置就,会触发__setitem__

    class Foo:
        def __init__(self,name):
            self.name=name
            
        def __getitem__(self,item):#获取对象的属性的内置方法,item='name'
            return self.__dict__.get(item)
            
        def __setitem__(self,key,value):
            self.__dict__[key]=value
        def __delitem__(self,key):
            print(key)
            
    obj=Foo('egon')
    #设置属性
    boj['sex']='male'
    print(obj.__dict__)
    print(obj.sex)
    

    执行结果为:
    ![image.png-17.2kB][1]

    删除属性:

    • del obj.name
      del obj['name'],这个会触发,上述的__delitem__,so代码为:
    class Foo:
        def __init__(self,name):
            self.name=name
        def __getitem__(self,item):#获取对象的属性的内置方法,item='name'
            return self.__dict__.get(item)
        def __setitem__(self,key,value):
            self.__dict__[key]=value
        def __delitem__(self,key):
            self.__dict__.pop(key)
    obj=Foo('egon')
    
    #删除属性
    del obj['name']
    print(obj.__dict__)
    

    执行结果:
    ![image.png-18.6kB][2]

    __str__系列:

    以前我们说过{'name':'egon'}这个字典其实就是本质就是我们 调用dict()这个类,然后把参数传进来而已,例如:
    dict({'ggname':'egon'})

    如上述我们可以使用:d=dict({'name':'egon'})
    print(isinstance(d,dict))

    执行结果:True
    说明:d就是dict的一个实例;

    • 对于python自带的类,他们自带配备有打印的功能,打印出来的不是一个对象的地址:
      ![image.png-62.5kB][3]

    执行结果:
    ![image.png-29.6kB][4]

    如上述我加入了:姓名和年龄,结果打印结果还是实力对象地址:
    ![image.png-91.1kB][5]
    执行结果:
    ![image.png-19.8kB][6]

    如上述的代码我们可以知道,对象实例化的时候对我们有用的属性有哪些:名字和年龄,那我们就需要定制一个方法,让他在print()这个对象的时候,就把对我有用的信息打印出来,这个内置的方法是什么呢?
    是:

    __str__方法:
    ![image.png-78.9kB][7]
    其实当我们执行:print(obj)也就等于print(obj.str())

    class People:
        def __init__(self,name,age):
            self.name =name
            self.age=age
        def __str__(self):
            return'<name:%s,age:%s>' %(self.name,self.age)
    obj =People('egon',18)
    print(obj)
    

    如上述代码,在自动调取print(obj)的时候回,回自动去调取__str__这个方法;

    del

    之前我们学习过操作文件,

    f=open('a.txt')
    f.read()
    f.close()
    
    

    涉及到两方面的知识:上述代码的执行原理是;

    a.txt是放在硬盘里面的,程序是不能直接操作硬盘的,程序是通过操作系统,然后有操作系统去操作硬盘的文件,所以我们在打开文件之后,要进行close,目的就是回收操作系统的资源,因为所有的资源不可能让你一直占用的;

    • 在你程序关闭之前,把操作系统的资源回收的;
    class Open:
        def __init__(self,filename):
            self.filename=filename
    
        def __del__(self):
            print('del....回收操作系统资源,self.close()')
    f=Open('setttings.py')
    print('------main-------')#这是python 自动给你执行的del也可以自己执行:
    del f # f.__del__()
    
    • 内置的——-del--(),在对象被删除的时候,python就自动调用__del__()这个方法;
  • 相关阅读:
    个人博客设计:创建Sql数据库操作类。
    文件 md5 查看 命令
    https 理解
    ie8、9 post 跨域
    tomcat https
    wamp 初始化 修改mysql密码
    面试-Android之java基础
    apktool.bat
    面试------Android 版本之前的差异(常见,欢迎补充)。
    ubuntu kylin 设置 wifi
  • 原文地址:https://www.cnblogs.com/surewing/p/9769990.html
Copyright © 2011-2022 走看看