Невозможно сослаться на себя в декларации метода? - PullRequest
0 голосов
/ 05 апреля 2010

Я хотел написать метод с аргументом, который по умолчанию имеет переменную-член, например:

def method(self, arg1=0, arg2=self.member):

Видимо, это запрещено. Должен ли я написать это по-другому или, возможно, использовать значение arg2, чтобы указать, когда использовать переменную-член?

Ответы [ 2 ]

5 голосов
/ 05 апреля 2010

Да, используйте часового - например ::100100

class Foo(object):
    _sentinel = object()
    def method(self, arg1=0, arg2=_sentinel):
        if arg2 is self._sentinel: arg2 = self.member
        ...
    ...

обратите внимание, что вам нужно голое имя _sentinel в def, но self._sentinel в теле метода (поскольку так происходит определение области действия в телах классов по сравнению с телами методов; -).

2 голосов
/ 05 апреля 2010
def method(self, arg1=0, arg2=None):
    if arg2 is None:
        arg2 = self.member
    ...
...