香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

浅谈Python反射 & 单例模式


时间:2022-04-02 10:24 作者:admin610456


反射

什么是反射?

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

面向对象中的反射

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

- python/' target='_blank'>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反射 & 单例模式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)