首页 > 解决方案 > 参数范围和返回值的区别

问题描述

下面的例子是我在野外看到的东西的简单版本。

class Client(object):

    def __init__(self, session):
        self.session = session

    def _get(self, path, **kwargs):
         self.session.get("etc")

def ScopedObject(cls):
    return cls

ScopedClient = ScopedObject(Client) # Why??

最后一行有什么用?

这是我试图弄明白发生了什么的一个例子。(上面的代码只是为了上下文)。

>>> class A:
...     def __init__(self, v):
...             self.x = v
...
>>> def scope(cls): return cls
...
>>> a = A
>>> b = scope(a)
>>> a
<class __main__.A at 0x10989c2f0>
>>> b
<class __main__.A at 0x10989c2f0>
>>> a(1)
<__main__.A instance at 0x1098df910>
>>> b(1)
<__main__.A instance at 0x1098df870>
>>> a(1)
<__main__.A instance at 0x1098df910>

所以,好吧,这会导致他们的实例不同。但我可以通过以下方式完成同样的事情:

>>> c = a
>>> c(1)
<__main__.A instance at 0x1098df870>

它返回与 完全相同的实例b

我错过了什么?

标签: pythonfunctiondesign-patterns

解决方案


推荐阅读