您的位置:首页 > 编程语言 > Python开发

【Todo】Python面试题分析记录(修饰器等)

2016-12-11 10:24 211 查看
首先,看这一段代码:
class A(object):
x = 1
gen = (lambda t: (t for _ in xrange(10)))(x)
if __name__ == '__main__':
print(list(A.gen))
打印出:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
装饰器学习:看这篇文章应该就可以了:《Python装饰器学习(九步入门)》里面提到http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html内置的装饰器有三个,分别是staticmethod、classmethod和property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。由于模块里可以定义函数,所以静态方法和类方法的用处并不是太多,除非你想要完全的面向对象编程。而属性也不是不可或缺的,Java没有属性也一样活得很滋润。从我个人的Python经验来看,我没有使用过property,使用staticmethod和classmethod的频率也非常低。重点关注第11行的@timeit,在定义上加上这一行与另外写foo = timeit(foo)完全等价,千万不要以为@有另外的魔力。除了字符输入少了一些,还有一个额外的好处:这样看上去更有装饰器的感觉。
class Rabbit(object):

def __init__(self, name):
self._name = name

@staticmethod
def newRabbit(name):
return Rabbit(name)

@classmethod
def newRabbit2(cls):
return Rabbit('')

@property
def name(self):
return self._name

这里定义的属性是一个只读属性,如果需要可写,则需要再定义一个setter:

@name.setter
def name(self, name):
self._name = name
http://blog.csdn.net/mdl13412/article/details/22608283里面给出了一些实例参考对于类方法的装饰器,有人给出如下方案:
def decorator(args):
def _deco(func):
def _func(self):
print args
print 'gooooo'
func(self)
print 'fooo'
return _func

return _deco
关于直接对类编写装饰器,如下:http://www.2cto.com/kf/201603/494405.html

中文编码

可以看这里:http://www.cnblogs.com/charlesblc/p/6159109.html 其他的后续再看吧...

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: