反射

什么是反射?

- 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)

面向对象中的反射

- 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员

- python中的一切事物都是对象(都可以使用反射)

四个可以实现自省的函数:

- getattr()   获取属性

- hasattr()  判断对象中是或否拥有特定的值

- setattr()   设置属性

- delattr(obj,'gender')  删除属性

class Info:

     def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def show(self):
return '%s - %s' %(self.name,self.age) obj = Info('alex','20','男') b = 'name'
print(obj.__dict__[b])
print(obj.__dict__['name']) #getattr()
inp = input('请输入想要获取的内容:')
v = getattr(obj,inp)
print(v) func = getattr(obj,'show')
v = func()
print(v) #hasattr()
print(hasattr(obj,'name')) #setattr()
setattr(obj,'k1','v1') #delattr(obj,'gender')
obj.gender # 此时报错,Info类中的gender对象已被删除

操作类对象:

class Info(object):
staticField = "Hello World!" def __init__(self):
self.name = 'mike' def func(self):
return 'func' @staticmethod
def bar():
return 'bar' print(getattr(Info, 'staticField'))
print(getattr(Info, 'func')) # 返回函数的内存地址
print(getattr(Info, 'bar')) # 返回函数的内存地址

单例模式

什么是单例模式?

- 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。

- 当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

- 单例,永远使用同一份实例(对象)。单例模式能够有效地节约内存资源。

实现单例模式:

class Info:
__v = None @classmethod
def get_instance(cls):
if cls.__v:
return cls.__v
else:
cls.__v = Info()
return cls.__v obj1 = Info.get_instance()
print(obj1)
obj2 = Info.get_instance()
print(obj2)

Python学习 :反射 & 单例模式的更多相关文章

  1. day28 python学习反射 sinstance和issubclass

    isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 判断这个对象是不是这个类,或者是不是这个类的子类的实例化 class Foo( ...

  2. Python学习笔记之在Python中实现单例模式

    有些时候你的项目中难免需要一些全局唯一的对象,这些对象大多是一些工具性的东西,在Python中实现单例模式并不是什么难事.以下总结几种方法: 使用类装饰器 使用装饰器实现单例类的时候,类本身并不知道自 ...

  3. python学习——单例模式

    在python中,单例模式在面试中非常重要.下面来给大家推荐一个Python中实现单例模式的博客地址. https://www.cnblogs.com/huchong/p/8244279.html

  4. Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究

    Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: ​ 反射的概念是由Smith在1982年首次提出的 ...

  5. Python学习之==>面向对象编程(二)

    一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...

  6. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  7. Python学习总结:目录

    Python 3.x总结 Python学习总结[第一篇]:Python简介及入门 Python学习总结[第二篇]:Python数据结构 Python学习总结[第三篇]:Python之函数(自定义函数. ...

  8. Python 学习笔记大纲

    Python Basic 第一章:Python基础の快速认识基本语法 (点击进入博客)我的第一个HelloPython程序.如何实现用户输入.Python的自带电池(模块).变量.格式化.条件判断.循 ...

  9. python学习总结---学习交流群里的问题总结

    xml里面的过滤: <record id="action_partner_supplier_form_demo_ms" model="ir.actions.act_ ...

  10. Python学习(二)Python 简介

    Python 简介 官方指南及文档 Python2.7官方指南(中文版):http://pan.baidu.com/s/1dDm18xr Python3.4官方指南(中文版):http://pan.b ...

随机推荐

  1. ORACLE 数据找回

    -- 找回一个小时前的数据 select * from sys_system_dictionary as of timestamp sysdate - 1/24order by id AS OF TI ...

  2. C#中Array、ArrayList和List三者的区别

    1.Array  在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. 它的空间大小是固定的,空间不够时也不能再次申请,所以需要事前确定合适的空间大小. 2. ...

  3. 浅析Linux操作系统是如何工作的(思维导图)

    SA***189 多任务计算机运转机制如下思维导图所示: 小结: Linux操作系统是一个在时钟的节拍下,各个模块紧密协作.密不可分的整体,而整个Linux系统都是建立在存储程序的基础之上,正是有了程 ...

  4. C++ 重载 重写 重定义

    重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰

  5. Linux命令--网络管理

    write命令 Linux write命令用于传讯息给其他使用者. 使用权限:所有使用者. 语法 write user [ttyname] 参数说明: user : 预备传讯息的使用者帐号 ttyna ...

  6. BZOJ3697:采药人的路径(点分治)

    Description 采药人的药田是一个树状结构,每条路径上都种植着同种药材. 采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是阳性的. 采药人每天都要进行采药 ...

  7. Kali-linux破解LM Hashes密码

    LM(LAN Manager)Hash是Windows操作系统最早使用的密码哈希算法之一.在Windows 2000.XP.Vista和Windows 7中使用了更先进的NTLMv2之前,这是唯一可用 ...

  8. Kali更新与升级

    当用户使用一段时间以后,可能对总是在没有任何变化的系统中工作感到不满,而是渴望能像在Windows系统中一样,不断对自己的Linux进行升级.另外,Linux本身就是一个开放的系统,每天都会有新的软件 ...

  9. gdbt与adboost(或者说boosting)区别

    boosting 是一种将弱分类器转化为强分类器的方法统称,而adaboost是其中的一种,或者说AdaBoost是Boosting算法框架中的一种实现 https://www.zhihu.com/q ...

  10. PHP面试系列 之Linux(二)---- Linux系统定时任务

    环境:ubuntu 16 一.cron实现定时任务 cron实现的定时任务是周期性循环执行的. 1.安装cron sudo apt-get install cron 2.添加定时任务(进行编辑) cr ...