关于python单方法的类

Posted 北风之神0509

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于python单方法的类相关的知识,希望对你有一定的参考价值。

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单方法的类的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象:继承多态类属性和类方法单例

如何将 View 类中的代码片段移动到 OnAppearing() 方法?

python的类和类的单继承

关于JAVA

为啥这个带有 shebang #!/bin/sh 和 exec python 的片段在 4 个单引号内起作用?

关于在python类的方法中 实例化其他的类