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))
  • 相关阅读:
    【python-leetcode107-树的宽度遍历】二叉树的层次遍历Ⅱ
    Spring依赖
    Dubbo依赖
    免费内网穿透
    Oracle分析函数Over()
    测压工具
    编译器版本
    修改gridfilters.js源码,往后台多传递一个参数,并设置NumericFilter、StringFilter默认提示信息
    网站10分钟不操作会话退出
    win10彻底关闭windows defender,解决无故占用大量CPU问题
  • 原文地址:https://www.cnblogs.com/yaya625202/p/8888007.html
Copyright © 2011-2022 走看看