Python 参数范围和返回值的差异
下面的例子是我在野外看到的一些东西的简单版本Python 参数范围和返回值的差异,python,function,design-patterns,Python,Function,Design Patterns,下面的例子是我在野外看到的一些东西的简单版本 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 = Scope
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??
最后一行有什么用
下面是一个我试图弄清楚发生了什么的例子。(上面的代码仅用于上下文)
>>A类:
... 定义初始值(self,v):
... self.x=v
...
>>>def作用域(cls):返回cls
...
>>>a=a
>>>b=范围(a)
>>>a
>>>b
>>>a(1)
>>>b(1)
>>>a(1)
所以,好吧,这会导致它们的实例不同。
但我也可以通过这样做来完成同样的事情:
>>> c = a
>>> c(1)
<__main__.A instance at 0x1098df870>
>c=a
>>>c(1)
它返回与b
完全相同的实例
我遗漏了什么?你发布的代码毫无意义。也许原始代码也是毫无意义的,或者可能是您无意中删除了该点。我不会结束这个问题,因为答案很清楚:正如您正确推断的,
a
和b
指向同一个对象-ScopedObject
函数没有任何用处。是的,我同意我发现的代码似乎毫无意义。然而,我看到这个“设计选择”在生产代码中重复了好几次,这让我怀疑它实际上毫无意义。因此,我为什么要问这个问题:我遗漏了什么?从你的例子中我们可以看出,你没有遗漏任何东西。
>>> c = a
>>> c(1)
<__main__.A instance at 0x1098df870>