将单方法的类转换为函数-华为云大数据中台架构分享

时间:2024-07-01 05:00:36
【文件属性】:

文件名称:将单方法的类转换为函数-华为云大数据中台架构分享

文件大小:5.68MB

文件格式:PDF

更新时间:2024-07-01 05:00:36

Python cookbook 中文 参考

7.9 将单方法的类转换为函数 问题 你有一个除 __init__() 方法外只定义了一个方法的类。为了简化代码,你想将 它转换成一个函数。 解决方案 大多数情况下,可以使用闭包来将单个方法的类转换成函数。 举个例子,下面 示例中的类允许使用者根据某个模板方案来获取到 URL 链接地址。 from urllib.request import urlopen class UrlTemplate: def __init__(self, template): self.template = template def open(self, **kwargs): return urlopen(self.template.format_map(kwargs)) # Example use. Download stock data from yahoo yahoo = UrlTemplate('http://finance.yahoo.com/d/quotes.csv?s={nam es}&f={fields}') for line in yahoo.open(names='IBM,AAPL,FB', fields='sl1c1v'): print(line.decode('utf-8')) 这个类可以被一个更简单的函数来代替: def urltemplate(template): def opener(**kwargs): return urlopen(template.format_map(kwargs)) return opener # Example use yahoo = urltemplate('http://finance.yahoo.com/d/quotes.csv?s={nam es}&f={fields}') for line in yahoo(names='IBM,AAPL,FB', fields='sl1c1v'): print(line.decode('utf-8')) 讨论 大部分情况下,你拥有一个单方法类的原因是需要存储某些额外的状态来给方 法使用。 比如,定义 UrlTemplate 类的唯一目的就是先在某个地方存储模板 值,以便将来可以在 open()方法中使用。


网友评论