python3_内置函数方法

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2018/5/22 21:46
# @Author  : chen
# @File    : 常用类内置方法介绍.py

# item 系列 将对象模拟成字典格式
# 主要就是对实例属性的查找使用字典的格式

"""
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('deltiem...')
        print(key)


obj = Foo()

# 原本调用方法  obj.属性名 直接实例化时,并不会触发调用方法
obj['name']  # 达到 obj.name 访问属性的效果
# 实质上是从obj.__dict__这个字典中查找对应的key和value
"""

"""
class Foo:  # 将对象做成字典的形式,可以通过字典的形式访问
    def __init__(self, name):
        self.name = name

    def __getitem__(self, item):
        # print('getitem...')
        # print(item)
        return self.__dict__.get(item)

    def __setitem__(self, key, value):
        # print('setitem...')
        # print(key, value)
        self.__dict__[key] = value

    def __delitem__(self, key):
        # print('deltiem...')
        # print(key)
        # self.__dict__.pop(key)
        del self.__dict__[key]


obj = Foo('egon')

# 查看属性
# obj.属性名
print(obj['namexxx'])  # 使用get方法,避免了不存在的属性报错


# 设置属性
# obj.sex = 'male'
obj['sex'] = 'male'
print(obj.__dict__)


# 删除属性
# del obj.name
del obj['name']
print(obj.__dict__)
"""


#

"""
d = dict({'name': 'egon'})
print(isinstance(d, dict))
print(d)


class Foo:
    pass


obj = Foo()
print(obj)
# True
# {'name': 'egon'}
# <__main__.Foo object at 0x0000000002792668>  # 打印一个class, 通常显示是一个Foo的对象和地址
# 而python自带的类dict直接显示了内容,而不是显示内存地址之类
"""


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

    def __str__(self):  # 必须返回字符串
        # print('======>')
        # return '123'
        return '<name: %s, age: %s>' % (self.name, self.age)


obj = People('egon', 19)
print(obj)  # res = obj.__str__()  等同于获取这个结果
"""


# __del__
"""
f = open('settings.py')  # 应用程序想操作系统申请,在操作系统中打开了文件
# 应用程序操作硬盘需要向操作系统申请
f.read()  # f操作等于应用程序向操作系统申请
# 对应两部分得资源,应用程序的和操作系统的
# 应用程序获取的是一个变量而已,想操作系统发送了一个调用,操作系统里真正的打开了文件
# 操作系统真正的映射了硬件,操作完文件要记得关闭,回收。python有自动垃圾回收机制
# 但只能回收python应用级别的变量回收。但操作系统级别的需要在程序结束前,关闭。应用程序不能正真关闭操作系统资源
f.close()  # 回收操作系统的资源
print(f)  # 打印的结果是<_io.TextIOWrapper name='settings.py' mode='r' encoding='cp936'>
# 但再继续r.read()  会报错,ValueError: I/O operation on closed file.  系统资源被关闭
"""

"""
class Open:
    def __init__(self, filename):
        print('open file.....')
        self.filename = filename

f = Open('settings.py')  # 此时f变量回收了,但操作系统的资源没有被回收
"""


class Open:
    def __init__(self, filename):
        print('open file.....')
        self.filename = filename

    def __del__(self):
        print('回收操作系统资源:self.close()')
        # 操作回收跟python相关的系统资源,因为python无法自动回收哪些资源


f = Open('settings.py')
del f  # f.__del__()  # 同样也会回收操作系统资源,只是手动操作结果而已
print('--------main-----------')  # del f # f.__del__()

# 在对象被删除时自动先触发执行(回收系统资源)

猜你喜欢

转载自blog.csdn.net/u013193903/article/details/80445159