码迷,mamicode.com
首页 > 编程语言 > 详细

关于python单方法的类

时间:2018-08-13 14:03:11      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:def   链接地址   id3   参考   pen   需要   highlight   cut   orm   

1、大部分情况下,你拥有一个单方法类的原因是需要存储某些额外的状态来给方法使用。

 

此种情况下可以使用闭包代替,参考

关于这个计数器闭包和类各有千秋吧,但如果不是但方法的类,使用闭包模拟面向对象,那肯定是没有使用类好,类不光是封装了,还可以继承,代码结构也更清晰。

 

 

 

将单方法的类转换为函数

问题

你有一个除 __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={names}&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={names}&f={fields}‘)
for line in yahoo(names=‘IBM,AAPL,FB‘, fields=‘sl1c1v‘):
    print(line.decode(‘utf-8‘))

关于python单方法的类

标签:def   链接地址   id3   参考   pen   需要   highlight   cut   orm   

原文地址:https://www.cnblogs.com/ydf0509/p/9463630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!