请教Python 使用装饰器实现单例模式的原理

2025-05-05 00:00:32
推荐回答(2个)
回答1:

简单来讲,可以不严谨地把Python的装饰器看做一个包装函数的函数。 比如,有一个函数: def func(): print 'func() run.' if '__main__' == __name__: func() 运行后将输出: func() run. 现在需要在函数运行前后打印一条日志

回答2:

@deco
def func():
...
是下面代码的简写
func = deco(func)
这就是装饰器做的事情
[0]

private = 0

a simple fun

private = 1

a simple fun

private = 2

a simple fun

private = 3

a simple fun

private = 4

a simple fun

[0]

private = 0

a simple2 fun

private = 1

a simple2 fun

private = 2

a simple2 fun

private = 3

a simple2 fun

private = 4

a simple2 fun

#!/usr/bin/python2

# coding: utf-8

def deco(f):

private = [0]

print private

# wrap 是一个closure

def wrap():

print 'private = ', private[0]

f()

private[0] += 1

return wrap

@deco

def simple():

print "a simple fun"

for i in xrange(5):

simple()

def simple2():

print "a simple2 fun"

# @deco

# def simple():

# ...

# 是下面代码的简写

# simple = deco(simple)

# 这就是装饰器做的事情

simple2 = deco(simple2)

for i in xrange(5):

simple2()