Python语句、函数与方法的使用技巧总结(2)

2019-05-17 14:24

# 单例装饰器 def singleton(cls):

instances = dict() # 初始为空 def _singleton(*args, **kwargs):

if cls not in instances: #如果不存在, 则创建并放入字典 instances[cls] = cls(*args, **kwargs) return instances[cls] return _singleton @singleton class Test(object): pass

if __name__ == '__main__': t1 = Test() t2 = Test()

# 两者具有相同的地址 print t1, t2 staticmethod装饰器

类中两种常用的装饰, 首先区分一下他们:

普通成员函数, 其中第一个隐式参数为对象

classmethod装饰器, 类方法(给人感觉非常类似于OC中的类方法), 其中第一

个隐式参数为类

staticmethod装饰器, 没有任何隐式参数. python中的静态方法类似与C++中的静态方法

#!/usr/bin/env python

# -*- coding: utf-8 -*- class A(object): # 普通成员函数 def foo(self, x):

print \ @classmethod # 使用classmethod进行装饰 def class_foo(cls, x):

print \ @staticmethod # 使用staticmethod进行装饰 def static_foo(x):

print \def test_three_method(): obj = A()

# 直接调用噗通的成员方法

obj.foo(\此处obj对象作为成员函数的隐式参数, 就是self obj.class_foo(\此处类作为隐式参数被传入, 就是cls A.class_foo(\更直接的类方法调用

obj.static_foo(\# 静态方法并没有任何隐式参数, 但是要通过对象或者类进行调用

A.static_foo(\if __name__ == '__main__': test_three_method()

# 函数输出

executing foo(<__main__.A object at 0x100ba4e10>, para) executing class_foo(, para) executing class_foo(, para) executing static_foo(para) executing static_foo(para)

property装饰器 定义私有类属性

将property与装饰器结合实现属性私有化(更简单安全的实现get和set方法)。

#python内建函数

property(fget=None, fset=None, fdel=None, doc=None)

fget是获取属性的值的函数,fset是设置属性值的函数,fdel是删除属性的函数,doc是一个字符串(像注释一样)。从实现来看,这些参数都是可选的。

property有三个方法getter(), setter()和delete() 来指定fget, fset和fdel。 这表示以下这行:

class Student(object):

@property #相当于property.getter(score) 或者property(score) def score(self): return self._score

@score.setter #相当于score = property.setter(score) def score(self, value): if not isinstance(value, int):

raise ValueError('score must be an integer!') if value < 0 or value > 100:

raise ValueError('score must between 0 ~ 100!') self._score = value iter魔法

通过yield和__iter__的结合,我们可以把一个对象变成可迭代的 通过__str__的重写, 可以直接通过想要的形式打印对象 #!/usr/bin/env python # -*- coding: utf-8 -*- class TestIter(object): def __init__(self): self.lst = [1, 2, 3, 4, 5]

def read(self):

for ele in xrange(len(self.lst)): yield ele def __iter__(self): return self.read() def __str__(self):

return ','.join(map(str, self.lst))

__repr__ = __str__ def test_iter(): obj = TestIter() for num in obj: print num print obj

if __name__ == '__main__': test_iter() 神奇partial

partial使用上很像C++中仿函数(函数对象)。

在stackoverflow给出了类似与partial的运行方式:

def partial(func, *part_args):


Python语句、函数与方法的使用技巧总结(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:免费下载 万科集团住宅工程产品质量实测操作指引

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: