python 之 面向对象(反射、__str__、__del__)
7.10 反射
下述四个函数是专门用来操作类与对象属性的。通过字符串来操作类与对象的属性,这种操作称为反射
class People:
country="China"
def __init__(self,name):
self.name=name
def tell(self):
print('%s is aaa' %self.name)
obj=People('egon')
hasattr:
print(hasattr(People,'country')) #True
print('country' in People.__dict__) #True
print(hasattr(obj,'name')) #True
print(hasattr(obj,'country')) #True
print(hasattr(obj,'tell')) #True
getattr:
x=getattr(People,'country',None)
print(x) #China
f=getattr(obj,'tell',None)
print(f) #<bound method People.tell of <__main__.People object at 0x000001E6AA9EACC0>>
print(obj.tell) #<bound method People.tell of <__main__.People object at 0x000001E6AA9EACC0>>
setattr:
People.x=111
setattr(People,'x',111)
print(People.x) #
obj.age=18
setattr(obj,"age",18)
print(obj.__dict__) #{'name': 'egon', 'age': 18}
delattr:
del People.country
delattr(People,"country")
print(People.__dict__)
del obj.name
delattr(obj,"name")
print(obj.__dict__) # {'age': 18}
反射的应用:
class Foo:
def run(self):
while True:
cmd=input('cmd>>: ').strip() #用户输入的是字符串
if hasattr(self,cmd):
func=getattr(self,cmd) #拿到函数地址
func() def download(self):
print('download....')
def upload(self):
print('upload...')
obj=Foo()
obj.run()
7.11__str__方法
__str__( )用于在对象print( )时自动触发 class People:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def __str__(self):
return '<名字:%s 年龄:%s 性别:%s>' %(self.name,self.age,self.sex)
obj=People('egon',18,'male')
print(obj) # <名字:egon 年龄:18 性别:male> # print(obj.__str__())
# l=list([1,2,3])
# print(l)
7.12 __del__方法
__del__( )用于在对象被删除前,自动执行 class MyOpen:
def __init__(self,filepath,mode="r",encoding="utf-8"):
self.filepath=filepath
self.mode=mode
self.encoding=encoding
self.fobj=open(filepath,mode=mode,encoding=encoding) #申请系统资源
def __del__(self): # 在回收程序空间(对象被删除)前自动触发__del__( ),删除文件空间(系统空间)
self.fobj.close()
f=MyOpen('aaa.py',mode='r',encoding='utf-8')
res=f.fobj.read()
print(res)
python 之 面向对象(反射、__str__、__del__)的更多相关文章
- Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)
上节课复习:1.编程思想 面向过程 核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么 基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维 ...
- Python之面向对象反射
Python之面向对象反射 isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(object): 2 pass 3 4 obj = Foo() 5 6 ...
- Python之面向对象-反射
一.什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问,检测和修改它本省状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被 ...
- python基础-9__import__ 反射和面向对象基础 self 封装 继承(多继承顺序) 多态
一 反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...
- 【转】Python之面向对象与类
[转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...
- Python OOP面向对象
一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...
- Python 【面向对象】
前言 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言 ...
- Python之路- 反射&定制自己的数据类型
一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, super)检查sub类是否是 super ...
- Python -面向对象(一 基本概念)
一 Python简单介绍 Python是一个可移植的面向对象的脚本语言. Python尽管是一个脚本语言,但也是一个全然面向对象的语言.由于它设计之初把易用性做为很重要的一个考量标准,所以用起来很简洁 ...
- python初始面向对象
阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...
随机推荐
- vmvare ESXi使用
新建主机,选择系统,自定义配置,选择ios镜像,完成,打开电源,开启配置
- 将两个各有n个元素的有序表归并成一个有序表,其最多的比较次数
最多的比较次数是当两个有序表的数据刚好是插空顺序的时候,比如:第一个序列是1,3,5,第二个序列是2,4,6,把第二个序列插入到第一个序列中,先把第二个序列中的第一个元素2和第一个序列依次比较,需要比 ...
- 【CF1142B】Lynyrd Skynyrd
[CF1142B]Lynyrd Skynyrd 题面 洛谷 题解 假设区间\([l,r]\)内有一个循环位移,那么这个循环位移一定有一个最后的点,而这个点在循环位移中再往前移\(n-1\)个位置也一定 ...
- 第01组 Alpha冲刺(3/6)
队名:007 组长博客: https://www.cnblogs.com/Linrrui/p/11873424.html 作业博客: https://edu.cnblogs.com/campus/fz ...
- CloudFlare上线了新的Proxy Anything选项, 支持转发TCP连接
https://www.nicho1as.wang/articles/cf-proxy-anything.html 申请地址:https://goo.gl/forms/Oc2jyyo0kXsrMyw3 ...
- MySQL索引原理(三)
多个单列索引和联合索引的区别详解 背景:为了提高数据库效率,建索引是家常便饭:那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里 ...
- RSA加密公钥系数获取结果多00
写在前面 本文是在解决加密和解密用的不是同一套密钥对时找到的一篇, 最后问题不在byte数组, 是自己工具类中生成密钥对的问题, 但是本文RSA加密中公钥指数和公钥系数的获取(byte[]部分)讲解比 ...
- 使用ssh-keygen生成私钥和公钥
1.使用ssh-keygen生成私钥和公钥 命令如下: ssh-keygen -t rsassh-keygen -t rsa -C "用户名自取"可以是邮箱 例子: fdipzon ...
- python快速搭建http服务
在Windows 7/10或Ubuntu上可以通过python2.x或python3.x来快速搭建一个简单的HTTP服务器. 如果python为2.x,则可执行:$ python -m SimpleH ...
- python工程设置工具(pipenv)
原始安装 pip工具 --- 包安装工具, 可以从Python包索引hub上安装,也可以使用自定义的hub. 命令: pip install xxx 缺点: 1.命令方式, 一次只能安装一个包, 对于 ...