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

    1.isinstance(obj,cls)和issubclass(sub,super)

    # isinstance(obj,cls)检查是否obj是否是类 cls 的对象
    
    class Foo(object):
        pass
    obj = Foo()
    print(isinstance(obj, Foo))
    
    
    # issubclass(sub, super)检查sub类是否是 super 类的派生类
    
    class Foo(object):
        pass
    class Bar(Foo):
        pass
    print(issubclass(Bar, Foo))
    
    
    # 运行结果
    True
    True
    

      

    2、 item系列:属性操作

    • __setitem__,__getitem__,__delitem__
    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)
    
    f = Foo()
    
    f['name']           # 查看属性 obj.name
    f['name'] = 'alex'  # 设置属性
    del f['name']       # 删除属性
    >>>>>
    getitem..
    name
    setitem
    name alex
    delitem
    name
    

      

      (2)例子2

    #  item系列
    
    class Foo:
        def __init__(self, name):
            self.name = name
    
        def __getitem__(self, item):    # item='name'
            print('getitem..')
            return self.__dict__[item]  # self.__dict__[name]
    
        def __setitem__(self, key, value):
            print('setitem')
            # print(key,value)
            # self.key = value  # 错误演示 {'name': 'alex', 'key': 'male'}
            self.__dict__[key] = value  # {'name': 'alex', 'sex': 'male'}
    
        def __delitem__(self, key):
            print('delitem')
            # print(key)
            # del self.__dict__[key]
            self.__dict__.pop(key)
    
    f = Foo('alex')
    
    # 1.查看属性
    # obj.属性名
    print(f['name'])    # 查看属性obj.name
    # print(f['namexxx'])    # 没有namexxx属性
    
    
    # 2.设置属性
    f['sex'] = 'male'  # 添加属性
    # f['sex'] = 'male'
    print(f.__dict__)
    print(f.sex)
    
    # 3.删除属性
    # del obj.name
    del f['name']
    print(f.__dict__)
    
    
    # 自动触发执行
    
    # 对象可以变成字典对象,可以像字典一样的操作
    >>>运行结果
    getitem..
    alex
    setitem
    {'name': 'alex', 'sex': 'male'}
    male
    delitem
    {'sex': 'male'}
    

      

    3、__str__,__repr__,__format__

    # 改变对象的字符串显示__str__,__repr__
    # 自定制格式化字符串__format__
    
    
    # str 方法
    d = dict({'name':'alex'})
    print(isinstance(d, dict))
    print(d)
    
    # str函数或者print函数--->obj.__str__()
    # repr或者交互式解释器--->obj.__repr__()
    # 如果__str__没有被定义,那么就会使用__repr__来代替输出
    # 注意:这俩方法的返回值必须是字符串,否则抛出异常
    
    class People:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def __str__(self):
            print('===>str')
            return 'aaaa'   # 返回值必须是字符串,否则抛出异常
    
    obj = People('alex', 11)
    print(obj)  # 执行obj.__str__()
    》运行结果
    True
    {'name': 'alex'}
    ===>str
    aaaa
    

      

    4、__del__

    # 析构方法,当对象在内存中被释放时,自动触发执行。
    # 注:如果产生的对象仅仅只是python程序级别的(用户级),那么无需定义__del__,
    # 如果产生的对象的同时还会向操作系统发起系统调用,即一个对象有用户级与内核级两种资源,
    # 比如(打开一个文件,创建一个数据库链接),则必须在清除对象的同时回收系统资源,这就用到了__del__。
    
    
    f = open('settings.py', 'r', encoding='utf-8')
    data = f.read()
    f.close()  # 回收操作系统的资源
    print(data)
    
    # print(f)
    # f.read()
    # 析构方法,当对象在内存中被释放时,自动触发执行。
    
    class Open:
        def __init__(self,filename):
            print('open file')
            self.filename = filename
    
        def __del__(self):
            print('回收操作系统资源:self.close')
    
    f = Open('settings.py')
    
    print('---main---')
                        # 程序结束 执行 del f # f.__del__()
    >>运行结果
    open file
    ---main---
    回收操作系统资源:self.close
    

      

     5.其他

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

  • 相关阅读:
    HDU4465 Candy
    《有关概率和期望问题的研究》读书笔记(完成度:40%)
    HDU5583 Kingdom of Black and White
    Gym100548F Color
    HDU6035 Colorful Tree
    Echarts笔记
    springMVC
    Struts2
    SSH框架学习中遇到的问题
    I/O流
  • 原文地址:https://www.cnblogs.com/venicid/p/8617579.html
Copyright © 2011-2022 走看看