Генерация списка класса в Python - PullRequest
0 голосов
/ 20 апреля 2010

У меня возникли некоторые проблемы при создании списка для класса в Python. Я знаю, что есть кое-что простое, что я пропускаю, но я просто не могу понять это.

Мой основной код:

class Test:
    def  __init__(self,test):
        self.__test = test

Моя проблема в том, что если я введу

t = Test([1,3,5])

все будет работать нормально, но если я добавлю

t = Test()

Я получаю сообщение об ошибке: недостаточно введены параметры.

Я пытался добавить

def __init__(self,test=[])

в качестве параметра по умолчанию, который работает, но у меня нет уникальных списков.

Я искал повсюду и не могу понять, что я делаю неправильно. Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

4 голосов
/ 20 апреля 2010

Я не совсем уверен, что вы ищете, но вы, вероятно, хотите использовать None по умолчанию:

class Test:
    def  __init__(self,test=None):
        if test is None:
            self.__test = []
        else:
            self.__test = test
3 голосов
/ 20 апреля 2010

Аргументы по умолчанию оцениваются один раз, когда функция определена, поэтому, когда вы делаете:

def __init__(self, test=[]):

список 'test' распределяется между всеми вызовами __init__, в которых не указан аргумент test. То, что вы хотите, обычно выражается так:

def __init__(self, test=None):
    if test is None:
        test = []

Это создает новый список для каждого вызова, где test не передается аргумент (или когда он передается None, очевидно.)

3 голосов
/ 20 апреля 2010

Вы можете использовать следующую идиому:

class Test:
    def  __init__(self,test=None):
        self.__test = test if test is not None else []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...