Как лучше всего устанавливать параметр как тип словаря в качестве значения по умолчанию в python - PullRequest
0 голосов
/ 13 июня 2019

Я пытался написать класс с изменяемым объектом в качестве значения по умолчанию. Я знаю, что для одной функции мы должны установить параметр как None и проверить параметр в случае побочного эффекта для функции, подобного следующему коду. Но мне было интересно, как насчет того, когда я пытался инициализировать класс? побочный эффект от использования изменяемого объекта в качестве значения по умолчанию для переменной

def func(k, v, para = {}):
    para[k] = v
    return para
print(func('a', 1)) #expect {'a': 1}, actually return {'a': 1}
print(func('b', 2)) #expect {'a': 1}, actually return {'a': 1, 'b': 2}
print(func('c', 3)) #expect {'a': 1}, actually return {'a': 1, 'b': 2, 'c': 3}
#how about class?
class T
    def __init__(self, para = {})
    #or
    #def __init__(self, para = None)
        #para = para or dict()
        self.para = para

1 Ответ

2 голосов
/ 13 июня 2019

Рекомендуется следующее:

Источник: Почему пустой словарь является опасным значением по умолчанию в Python?

def func(k, v, para=None):
    if para is None:
        para = dict()
    para[k] = v
    return para
print(func('a', 1)) #returns {'a': 1}
print(func('b', 2)) #returns {'b': 2}
print(func('c', 3)) #returns {'c': 3}

И да, япочти уверен, что то же самое относится и к классам.

class T:
    def __init__(self, para=None):
        if para is None:
            para = dict()
        self.para = para



Давайте просто проверим, что происходит с классами:

class T:
    def __init__(self, k, v, para={}):
        self.para = para
        self.para[k] = v

print(T('a',1).para) #returns {'a': 1}
print(T('b',2).para) #returns {'a': 1, 'b': 2}
print(T('c',3).para) #returns {'a': 1, 'b': 2, 'c': 3}

Так что да,То же относится и к конструкторам классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...