Я пытаюсь понять следующий питона фрагмент кода:Python синтаксис: х = SomeClass (some_input) (х)
x = SomeObject
x = SomeClass(some_input)(x)
Может кто-нибудь пролить некоторый свет на то, что здесь происходит?
Я пытаюсь понять следующий питона фрагмент кода:Python синтаксис: х = SomeClass (some_input) (х)
x = SomeObject
x = SomeClass(some_input)(x)
Может кто-нибудь пролить некоторый свет на то, что здесь происходит?
Продление другие ответ попытается дать более общий ответ, о том, как Python будет решить, что заявление
x = SomeClass(some_input)(x)
интерпретатор First Python будет пытаться решить заявление после =
, а затем назначить его x
, так что этот отпуск мы with_
SomeClass(some_input)(x)
В этом заявлении есть два основных элемента SomeClass
Instation и call
для результата, например, который должен быть вызываемым)
SomeClass(some_input): (x)
#---instantiation----:--call--
Это позволит решить сначала левую сторону, чтобы определить, что должно быть под названием, в левой части У нас есть экземпляр класса, это означает, что интерпретатор Python вызовет метод SomeClass.__init__(...)
с аргументами (some_input
). Это связано с тем, что если some_input
является вызовом метода, экземпляра, самой формулы или так, она попытается решить эту проблему в первую очередь.
SomeClass(some_input) # => <new object>
Это <new_object>
это тот, кто будет под названием с аргументами (x
) и это возможно потому, что SomeClass
может (и должен в этом примере) быть вызываемая только с внедрением метода __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
примечание: Ссылка на ссылку <new_object>
, так как она не связана с какой-либо переменной, будет потеряна после последнего утверждения.
Это может быть упрощена следующим образом (при условии, что вспомогательные переменные y
и z
не используются окружив код):
y = SomeObject
z = SomeClass(some_input)
x = z(y)
Спасибо за ваш ответ. Но что здесь происходит: x = z (y)? Выглядит как вызов функции, но z является объектом SomeClass, а не функцией ... – user1934212
В выражении 'z (y)' 'z' должен быть [вызываемый] (http://stackoverflow.com/ questions/111234/what-is-call-in-python) (функции - всего лишь один пример вызываемых объектов). – Leon
'SomeClass', по-видимому, можно вызывать, поэтому, когда вы создаете экземпляр -' y = SomeClass (some_input) '- вы можете его назвать:' y (...) '. – Ryan
Можете ли вы дать определения для 'SomeObject' и' SomeClass'? – Tagc
Определение класса немного связано с тем, чтобы опубликовать его здесь. Но, спасибо, указав мне направление «вызываемых классов», я, очевидно, должен изучить эту концепцию, чтобы понять этот синтаксис. – user1934212