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 = namedef __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 = nameself.age = agedef __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 = filenamedef __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
转载于:https://www.cnblogs.com/venicid/p/8617579.html
9 [面向对象]-内置方法相关推荐
- 面向对象--内置方法
__名字__ 类中的特殊方法\内置方法 双下方法 魔术方法 magic_method 类中的每一个双下方法都有它自己的特殊意义 1.__call__ 相当于 对象() class A:def __ca ...
- 二. python面向对象(内置方法and析构函数)
一. 内置方法和析构函数 __str__() 在调用print 打印对象时自动调用 是给用户用的 是一个描述对象的方法__repr__() 是给机器用的在python 解释器里面直接敲对象在回车后调用 ...
- python_day21面向对象的进阶(反射,内置方法,)
# 两个内置函数 *# 反射 *****# 内置方法 *** # 类(定义) # 静态属性 类属性(变量) 直接写在类中,全大写 # 动态属性 方法(函数) self # 类方法 @classmeth ...
- 面向对象之反射和其他内置方法
一.反射 1.概念:主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.简而言之,就是自身调用自身即可实现已定义的某一功能,以达到简化程序的作用. 2.python面向对象中的反射是指通过字符 ...
- python如何设计工具类_Python面向对象 --- 类的设计和常见的内置方法
面向对象:一种基于面向过程的新的编程思想.也就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种 ...
- Python 入门 —— Python 面向对象:类的创建及其基本内置方法的使用
Python 面向对象:类的创建及其基本内置方法的使用 首先了解一下什么是面向对象 面向过程: 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. ...
- 面向对象-1-类和对象、基础语法、初始化、内置方法和属性
1. 基本概念 2. 类和对象 例如: 3. 面向对象基础语法 class Cat:def eat(self):print('小猫爱吃鱼')def drink(self):print ('小猫爱喝水' ...
- python全栈开发基础【第十七篇】面向对象反射和内置方法
一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被 ...
- python 面向对象_多态、内置方法、反射
内容: 1.接口思想 2.抽象类思想 3.多态 4.内置方法 5.反射 1.接口思想 建立关联的桥梁,方便管理代码 接口类:用来定义功能的类,位继承它的子类提供功能 该类的功能方法一般不需要实现体,实 ...
最新文章
- 华为首款Harmonyos摄像头,掀起家居安防大变革 华为首款HarmonyOS智能摄像头发布...
- HDU2612 Find a Way BFS
- 4.ClassLink - 一种新型的VPC 经典网络的连接方式
- web前端响应式布局,自适应全部分辨率
- configure 查找依赖库_Rust在编译Android的库时,如何设定依赖的第三方库引用的C/C++的动态库的搜索路径?...
- 华为策略路由加等价路由_华为——防火墙——策略路由配置及思路
- Unity Shader之入门-helloworld
- php while for 性能,PHP For While 循环
- 如何在word 打钩 打叉
- hello github
- 程序设计语言基础知识复习
- creo数控编程怎么样_creo3.0数控编程加工使用实例视频教程入门到精通 车床编程...
- 如何在Nintendo交换机上设置家长控制
- iOS——结构体指针
- 新唐NUC980读取U盘配置
- Unity优化百科(UWA 博客目录)
- BSB网络验证 易语言网络验证系统 autojs 网络验证系统 免费的卡密收费系统 账号注册系统
- 螺旋英雄谭怎么在电脑上玩 螺旋英雄谭安卓模拟器教程
- 继承中各代码块的执行顺序
- win7系统安装网银助手时提示您尚未正确安装错误的两种解决方法图文教程