什么是反射?
- 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)
面向对象中的反射
- 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员
- python中的一切事物都是对象(都可以使用反射)
四个可以实现自省的函数:
- getattr() 获取属性
- hasattr() 判断对象中是或否拥有特定的值
- setattr() 设置属性
- delattr(obj,'gender') 删除属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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对象已被删除
|
操作类对象:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。
- 当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
- 单例,永远使用同一份实例(对象)。单例模式能够有效地节约内存资源。
实现单例模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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