2015-06-12 4 views
1

Мой код ниже:Как написать метод, который можно вызывать с разными параметрами?

class A: 
    def TestMethod(self): 
     print 'first method' 

    def TestMethod(self, i): 
     print 'second method', i 

ob = A() 
ob.TestMethod() 
ob.TestMethod(10) 

Он выдаст ошибку ..

Traceback (most recent call last): 
File "stack.py", line 9, in <module> 
    ob.TestMethod() 
TypeError: TestMethod() takes exactly 2 arguments (1 given) 

Как я могу иметь метод, который можно назвать с разным числом параметров?

+0

Как это достичь? как вы пробовали это сделать? – therealprashant

+0

В перегрузке питона не очень распространены (не исключено использование декораторов и т. Д.). Используйте аргумент ключевого слова вместо 'def TestMethod (self, i = None)'. Затем проверьте i и измените поведение –

+1

загляните в * args и ** kwargs для предоставления переменных переменных функции, но предупредите, что это не рекомендуется с помощью инструментов статического анализа, таких как pylint, и они будут заставлять вас писать сложный код – ThorSummoner

ответ

6

Python не поддерживает перегрузку метода. Это очень распространено для динамически типизированных языков, поскольку методы идентифицируются по их полной сигнатуре (имя, тип возврата, типы параметров) в статически типизированных языках, а динамически типизированные языки идут только по имени. Так что это просто не сработает.

Однако вы можете поставить функциональность в рамках методы, указав значение параметра по умолчанию, которые вы затем можете проверить, чтобы увидеть, если кто-то указано значение или нет:

class A: 
    def TestMethod(self, i = None): 
     if i is None: 
      print 'first method' 
     else: 
      print 'second method', i 
0

Если вы просто хотите дополнительно пройти один аргумент, то вы можете использовать решение poke. если вы действительно хотите обеспечить поддержку большого количества необязательных аргументов, тогда вы должны использовать args и kwargs.

class A: 
    def TestMethod(self, *args): 
     if not args: 
      print 'first method' 
     else: 
      print 'second method', args[0] 
Смежные вопросы