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

    http://www.cnblogs.com/linhaifeng/articles/6204014.html

     item系列,把对象obj模拟称字典,可以像字典一样操作对象属性

    class Foo:
        def __getitem__(self, item):
            print('getitem')
            print(item)
        def __setitem__(self, key, value):
            print('setitem')
            print(key,value)
        def __delitem__(self, key):
            print('delitem')
            print(key)
    obj=Foo()
    #获取属性
    obj['name']

    设置属性

    class Foo:
        def __init__(self,name):
            self.name=name
        #获取,需要达到obj.属性名取值
        def __getitem__(self, item):#item='name'
            return self.__dict__.get(item)
        #设置,需要达到obj.属性名="属性值"
        def __setitem__(self, key, value):
            # print('setitem')
            # print(key,value)
            self.key=value
        def __delitem__(self, key):
            print('delitem')
            print(key)
    obj=Foo('ya')
    print(obj.__dict__)
    obj['sex']='male'
    print(obj.__dict__)

    删除属性

    class Foo:
        def __init__(self,name):
            self.name=name
        def __getitem__(self, item):
            return self.__dict__.get(item)
        def __setitem__(self, key, value):
            self.key=value
        def __delitem__(self, key):
            print('delitem')
            print(key)
            self.__dict__.pop(key)
            #或者如下方法
            # del self.__dict__[key]
    obj=Foo('ya')
    print(obj.__dict__)
    del obj['name']
    print(obj.__dict__)

     __str__()方法,打印时触发

    都是类实例,为什么打印结果不一样?

    d=dict({'name':'ya'})
    print(d)
    class Foo:
        pass
    obj=Foo()
    print(obj)

    class Foo:
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def __str__(self):
            return str({'name':self.name,'age':self.age})
    obj=Foo('ya',19)
    print(obj)

    __del__()方法,在程序结束前,做一定的操作

    class Open:
        def __init__(self,filename):
            print("open file...")
            self.filenae=filename
        def __del__(self):
            print('回收操作系统资源')
    f=Open('settings.py')
    print('__main__')

    手动回收资源 

    class Open:
        def __init__(self,filename):
            print("open file...")
            self.filenae=filename
        def __del__(self):
            #和系统相关其他资源,在这里进行回收
            print('回收操作系统资源')
    f=Open('settings.py')
    del f#手动回收操作系统资源
    print('__main__')

    判断一个对象是否为某类实例

    class Foo:
        pass
    obj=Foo()
    #判断一个对象是否为某类实例
    print(isinstance(obj,Foo))

    判断一个sub类是否为super类的派生类

    class Foo:
        pass
    obj=Foo()class Bar(Foo):
        pass
    #判断一个sub类是否是super类的派生类
    print(issubclass(Bar,Foo))
  • 相关阅读:
    ArcGIS Pro二次开发-在地图上插入一个点
    ArcGIS Pro二次开发-获得所有图层
    ArcGIS Pro二次开发-识别工具
    ArcGIS Pro二次开发-放大缩小工具
    ArcGIS Pro二次开发-选择工具
    ArcGIS Pro二次开发计算一个面层的总面积
    arcgis pro二次开发官方文档
    已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。
    Windows把内存变成快速虚拟硬盘
    Ramdisk虚拟内存盘,Swap分区
  • 原文地址:https://www.cnblogs.com/yaya625202/p/8888007.html
Copyright © 2011-2022 走看看