我想了解以下python片段:
x = SomeObject
x = SomeClass(some_input)(x)
有人能说清楚这里发生了什么吗?
答案 0 :(得分:3)
可以简化为以下内容(假设周围代码不使用辅助变量y
和z
):
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>
将在最后一个语句后丢失。