首页 > 其他 > 详细

第七章 面向对象(12):一些常用的内置方法

时间:2019-07-19 00:34:02      阅读:57      评论:0      收藏:0      [点我收藏+]

7.15 内置方法(method)

类里面的函数就叫做方法。

  1. isinstance(obj, cls) obj对象是不是cls类的实例

  2. issubclass(sub, super)
    sub类是不是super类的子类

  3. 反射的方法
    • hasattr(o, name)
    • getattr(o, name, [default])
    • setattr(o, name, value)
    • delattr(o, name)
  4. item系列:把对象的访问模拟成字典类型
    • __getitem__(self, item)
    • __setitem__(self, key, value)
    • __delitem__(self, key)
    class Foo:
    
        def __init__(self, name):
            self.name = name
    
        def __getitem__(self, item):
            print('getitem...')
            print(item)
            return self.__dict__.get('item')  # 因为item是字符串类型,需要这样调用。用get方法,没有相应属性也不会报错
            # if hasattr(self, item):  # 这样也可以
                # return getattr(self, item) 
    
        def __setitem__(self, key, value):
            print('setitem...')
            print(key, value)
            self.__dict__[key] = value  # 设置属性
    
        def __delitem__(self, key):
            print('delitem...')
            print(key)
            self.__dict__.pop(key)  # 或者 del self.__dict__[key] ,删除属性
    
    obj = Foo('aaa')
    print(obj.__dict__)
    
    # 用字典的方式调用属性:getitem
    obj['name']  # 相当于obj.name
    print(obj.__dict__)
    
    # 用字典的方式设置属性:setitem
    obj['name'] = 'bbb'  # obj.name = 'bbb'
    obj['age'] = 11
    print(obj.__dict__)
    
    # 用字典的方式删除属性:
    del obj['age']
    print(obj.__dict__)

    执行结果:
    {‘name‘: ‘aaa‘} getitem... name {‘name‘: ‘aaa‘} setitem... name bbb setitem... age 11 {‘name‘: ‘bbb‘, ‘age‘: 11} delitem... age {‘name‘: ‘bbb‘}

  5. __str__(self) 定义打印时候的格式,
    ```
    # python中的dict类,在打印对象的时候会输出字典格式的结果
    # 但是我们定义的类,打印对象的时候只会显示是一个对象和其内存地址
    # __str__内置方法就可以让我们自定义打印的方式

    class People:
    def init(self, name, age):
    self.name = name
    self.age = age

     def __str__(self):  # __str__必须返回一个字符串类型,不然报错
         print('__str__...')
         return '{name:%s,age:%s}' % (self.name, self.age,)

    p1 = People(‘aaa‘, 11)
    print(p1) # 这时候会打印__str__定义的结果
    执行结果:
    str...
    {name:aaa,age:11}
    ```

  6. __del__ 回收跟对象相关联的资源时使用 触发时机:会在删除其绑定对象之前,先触发__def__()方法。
    ```
    # python中的open方法,实际上内部是python程序向os发送请求后,os打开的文件(应用程序是无法直接操作硬盘上的数据的,必须经过os)
    # 所以当你关闭应用程序前,也必须告诉os关闭对文件的操作(释放os的操作)

    # 我们模拟一下open方法来说明__del__的作用

    class Open:
    def init(self, filename):
    print(‘对os发送请求,os打开文件...‘)
    self.filename = filename

     def __del__(self):  # 在这个方法里可以定义一些回收os资源的操作
         print('__del__...')

    f = Open(‘test.txt‘) # 模拟打开文件

    # def f # 如果在这里删除 f ,那么 __del__会在这里触发

    print(‘----main----‘) # 这里程序已经执行完毕,python的自动垃圾回收机制会回收 f 对象,但是os的操作并不能回收

    # 从执行结果我们可以知道,__del__最后的print之后执行,也就是自动回收 f 的时候(确切上说是 f 被回收之前)执行del

    执行结果:

    对os发送请求,os打开文件...
    ----main----
    del...
    ```

第七章 面向对象(12):一些常用的内置方法

原文:https://www.cnblogs.com/py-xiaoqiang/p/11210481.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!