浅谈Python反射 & 单例模式

作者:初释衷年 时间:2023-10-14 21:16:30 

反射

什么是反射?

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

  面向对象中的反射

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

  - 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

标签:python,反射,单例模式
0
投稿

猜你喜欢

  • ACCESS的参数化查询 附ASP和C#(ASP.NET)函数

    2008-01-10 12:18:00
  • ASP.NET MVC Bundles 用法和说明(打包javascript和css)

    2023-07-17 01:20:59
  • socket + select 完成伪并发操作的实例

    2022-05-09 14:23:32
  • TensorFlow实现RNN循环神经网络

    2023-03-18 18:12:49
  • 通过XSL转换XML文件步骤

    2008-01-27 16:03:00
  • Sql Server 2012 转换函数的比较(Cast、Convert和Parse)

    2012-08-21 10:21:40
  • mssql @@ERROR 使用

    2024-01-28 13:56:51
  • Python3+selenium配置常见报错解决方案

    2022-12-21 14:44:53
  • Python网络编程中urllib2模块的用法总结

    2022-05-26 18:49:53
  • python使用RNN实现文本分类

    2023-10-17 14:07:18
  • Python中字符串切片详解

    2022-04-27 01:58:11
  • 用python实现一幅春联实例代码

    2021-07-23 09:25:41
  • numpy matrix和array的乘和加实例

    2022-09-29 15:17:45
  • pycharm 终端部启用虚拟环境详情

    2022-04-01 17:52:59
  • Python2手动安装更新pip过程实例解析

    2021-06-29 17:01:50
  • Python编程实现二叉树及七种遍历方法详解

    2022-10-31 13:28:28
  • javascript面向对象技术基础(四)

    2010-02-07 13:15:00
  • mysql日志滚动

    2024-01-26 18:38:52
  • python uuid生成唯一id或str的最简单案例

    2021-06-07 00:40:45
  • python算法学习之桶排序算法实例(分块排序)

    2022-09-08 13:11:33
  • asp之家 网络编程 m.aspxhome.com