Python语法:x = SomeClass(s​​ome_input)(x)

时间:2017-01-10 18:21:19

标签: python syntax

我想了解以下python片段:

 x = SomeObject
 x = SomeClass(some_input)(x)

有人能说清楚这里发生了什么吗?

2 个答案:

答案 0 :(得分:3)

可以简化为以下内容(假设周围代码不使用辅助变量yz):

y = SomeObject
z = SomeClass(some_input)
x = z(y)

答案 1 :(得分:1)

扩展其他人的响应将试图给出一个更一般的答案,关于Python将如何解决该声明

x = SomeClass(some_input)(x)

首先,Python的解释器会尝试在=之后解决该语句,然后将其分配给x,这样就留下了_

SomeClass(some_input)(x)

在此语句中,SomeClass实例有两个主要元素,结果实例有call应该是可调用的

SomeClass(some_input):  (x)
#---instantiation----:--call--

它将首先解决左侧以确定应该调用什么,在左侧我们有一个类实例化,这意味着Python解释器将调用SomeClass.__init__(...)方法带参数(some_input)。这涉及如果some_input是方法,实例化,公式本身的调用,它将首先尝试解决。

SomeClass(some_input) # => <new object>

这个<new_object>是带有参数(x)的名称的人,这是可能的,因为SomeClass可以(并且应该在此示例) callable 只需实施__call__方法,就像使用__init__一样,例如:

class Add:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
        print "Sum of", self.num1,"and",self.num2, "is:"

    def __call__(self):
        return (self.num1 + self.num2)

add = Add(1,2)
print add()

+ More info about objects being callables

note :由于未与任何变量绑定,引用<new_object>将在最后一个语句后丢失。