Лишние параметры питона - PullRequest
1 голос
/ 23 марта 2010

Я заметил несоответствие в способе вызова параметров python. На любом другом языке, с которым я имел дело, у вас либо есть

foo() 

означает либо отсутствие параметров, либо столько параметров, сколько вам нужно, либо

foo(arg1, arg2,...,argn)

, где вы передаете одинаковое количество параметров, чтобы определить функцию и вызвать ее. Однако в python я заметил, что определения функций, и когда функция вызывается, могут иметь два разных набора параметров, обычно они состоят из:

class foo(object):
    def bar(self, arg1, arg2):
        pass

Однако, когда я хочу вызвать функцию, все, что мне нужно сделать, это:

zoo = foo()
zoo.bar(arg1, arg2)

Куда ушел параметр self?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 23 марта 2010

Куда делись параметры?

Он находится перед точкой при вызове функции, т. Е. В вашем случае это zoo.

Обратите внимание, что вы также можете вызвать функцию как foo.bar(zoo, arg1, arg2). В основном в python object.method(arguments) является сокращением для objects_class.method(object, arguments).

3 голосов
/ 23 марта 2010

zoo - это собственный параметр.

Например, в C ++ объект неявно передается как указатель this. В Python этот параметр является явным.

1 голос
/ 23 марта 2010

zoo неявно передается в качестве первого параметра в вашем примере.

0 голосов
/ 24 марта 2010

Как я помню, "zoo.bar" дает вам только атрибут "bar" объекта "zoo", который можно вызвать. Вся магия делается при построении, где все методы класса связаны с этим объектом, пока заполнен словарь атрибутов. Рассмотрим следующий пример:

zoo = foo()
xbar = zoo.bar
xbar(arg1, arg2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...