2014-01-26 3 views
0

Есть ли способ в Python установить параметр как необязательный (игнорировать его, как если бы его не было)?Установка параметра как необязательного

То, что я имею в виду, что у вас есть класс, как:

class RandomClass(): 

    def __init__(self, x, y, z): 
     self.x = x 
     self.y = y 
     self.z = z 

    def __str__(self): 
     return str(self.lst()) 

    def lst(self): 
     return [self.x, self.y, self.z] 

и вы пытаетесь запустить это:

r1 = RandomClass(1,2,3) 
r1.lst() 
[1, 2, 3] 
print(r1) 
[1, 2, 3] 

это работает, но если бы вы попробовали что-то вроде: r1 = RandomClass(1,2) он потерпит неудачу.

Таким образом, если настройка параметров, чтобы быть по желанию можно затем они должны работать нормально:

r1 = RandomClass(1,2) 
r1 = RandomClass(1,2,3) 

Пример (предположим z устанавливается как опция), то:

r1 = RandomClass(1,2) 
    r1.lst() 
    [1, 2, None] 
    print(r1) 
    [1, 2, None] 

Я установил дополнительный параметр, чтобы put None, если не используется, но может быть что угодно, например, 0, 2 и т. д., чтобы определить, что оно не используется.

Как вы думаете, это возможно?

ответ

2

Вы можете установить значения по умолчанию для параметров. В этом случае вы хотите, чтобы z может быть предоставлен пользователем или нет. Таким образом, вы можете установить значение по умолчанию для None если пользователь дает 2 аргумента конструктору:

class RandomClass(object): 
    def __init__(self, x, y, z=None): 
     self.x = x 
     self.y = y 
     self.z = z # here, z will be None if only 2 arguments are passed 

    # other methods... 


[...] 
>>> r1 = RandomClass(1,2) 
>>> r1.lst() 
[1, 2, None] 

Убедитесь, что необязательные аргументы всегда в конце списка параметров (Это невозможно, чтобы написать что-то вроде __init__(self, x=None, y, z)) , Я советую вам прочитать этот урок: Using Optional and Named Arguments, от http://www.diveintopython.net/.

+0

Спасибо Максиму! не понял, что могу присвоить значение по умолчанию переменной в параметрах. – Sc4r

0

Ниже приведен пример метода, функция с двумя дополнительными аргументами:

def method(noDefault, arg1=10, arg2=1): 

"arg1" и "arg2"являются необязательными, потому что они имеют значения по умолчанию, заданные.

«noDefault» не требуется, поскольку он имеет значение по умолчанию.

Если "метод" это вызывается только с одним аргументом, произойдет следующее
arg1 по умолчанию 10
ARG2 по умолчанию 1.

Если методвызывается с двумя аргументами,
arg2 еще по умолчанию 1.

Смежные вопросы