浅谈Python反射 & 单例模式
作者:初释衷年 发布时间:2023-10-14 21:16:30
标签:python,反射,单例模式
反射
什么是反射?
- 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)
面向对象中的反射
- 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员
- 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反射 & 单例模式详解整合网站的支持!
来源:https://www.cnblogs.com/ArticleYeung/p/10562744.html
0
投稿
猜你喜欢
- 容我废话一下最近几个月,毒教材被曝光引发争议,那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转
- Azkaban是什么?Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺
- 本文实例讲述了Python实现随机创建电话号码的方法。分享给大家供大家参考,具体如下:当需要随机的生成一些电话号码的时候,可以使用以下脚本,
- 迭代器跟生成器,与上篇文章讲的装饰器一样,都是属于我的一个老大难问题。通常就是遇到的时候就去搜一下,结果在一大坨各种介绍博客中看了看,回头又
- 1、前期准备通过 pip 或 easy_install 安装了 pymongo 之后, 就能通过 Python 调教 mongodb 了.接
- 废话不多说。直接上代码:sock_post.php:<?phpfunction sock_post($url, $data='
- 1. 案例取所有不为掌门人的员工,按年龄分组!select age as '年龄', count(*) as '人数
- 索引是加速表内容访问的主要手段,特别对涉及多个表的连接的查询更是如此。这是数据库优化中的一个重要内容,我们要了解为什么需要索引,索引如何工作
- 目录1、切片的基础用法2、切片的高级用法3、自定义对象实现切片功能3.1、魔术方法:`getitem()`3.2、自定义序列实现切片功能3.
- 我确定有很多关于Unicode和Python的说明,但为了方便自己的理解使用,我还是打算再写一些关于它们的东西。 字节流 vs U
- 应用 Scrapy框架 ,配置动态IP处理反爬。# settings 配置中间件DOWNLOADER_MIDDLEWARES = { &nb
- 1. defer的简单介绍与使用场景defer是Go里面的一个关键字,用在方法或函数前面,作为方法或函数的延迟调用。它主要用于以下两个场景:
- 截图源码Translator.py#!/usr/bin/python# -*- coding: UTF-8 -*-from copy imp
- wx包中的方法都是以大写字母开头的,而这和Python的习惯是相反的。本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带
- 一、控制用户存取 1、创建修改用户Creating Users Create/alter user new_user identified
- 本文实例讲述了python读写配置文件操作。分享给大家供大家参考,具体如下:在用编译型语言写程序的时候,很多时候用到配置文件,作为一个约定的
- 目录一、外键约束什么是外键: 外键的使用条件:外键的定义语法:简单演示使用一、外键约束 &nbs
- 前言最近在学习python,发现一个微信自动发消息的小demo感觉很有意思,试了一下,不成功,因为demo中用的是itchat这个库来操作微
- 背景最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便
- 一封电子邮件的旅程是:MUA:Mail User Agent——邮件用户代理。(即类似Outlook