#!/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__()
# 在对象被删除时自动先触发执行(回收系统资源)
python3_内置函数方法
猜你喜欢
转载自blog.csdn.net/u013193903/article/details/80445159
今日推荐
周排行