Python学习 :反射 & 单例模式
程序员文章站
2022-03-04 10:13:50
反射 什么是反射? - 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省) 面向对象中的反射 - 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员 - python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数: - getattr() 获取属性 - ......
反射
什么是反射?
- 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)
面向对象中的反射
- 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员
- 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)