• 关于python单方法的类


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

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

    javascript的闭包计数器实现,python实现各种方法来实现计数器

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

    将单方法的类转换为函数

    问题

    你有一个除 __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'))
  • 相关阅读:
    1142
    dbms_monitor开启/关闭会话跟踪
    mysql密码过期问题
    zabbix监控mysql
    12C -- ORA-65048 ORA-65048
    idea的快捷键
    IntelliJ IDEA的配置优化
    IDEA环境设置
    Java 中int、String的类型转换
    js数组去重
  • 原文地址:https://www.cnblogs.com/ydf0509/p/9463630.html
Copyright © 2020-2023  润新知