Como atribuir variáveis ​​de instância como valores padrão para argumentos de palavras-chave na mesma classe em Python

StackOverflow https://stackoverflow.com//questions/23002587

Pergunta

No Python 3.3+, dada uma classe com um método, a classe tem uma variável de instância, que é um objeto object() simples (vamos chamá-lo de self.FALSE).Como uso essa variável de instância como valor padrão para um argumento de palavra-chave?

class Test:
    def __init__(self):
        self.FALSE=object();
    def Tester(self, key=self.FALSE):
        pass;

É claro que isso não funciona porque o escopo dos valores padrão do argumento de palavra-chave não inclui self (nem inclui a classe Test em geral).No entanto, inclui variáveis ​​globais e pelo menos alguns objetos.

Existe uma maneira de fazer isso?Não estou com muita necessidade agora, mas seria muito bom se eu pudesse fazer isso de alguma forma.Eu acho que você seria capaz de passar qualquer coisa como valor padrão do argumento de palavra-chave.Certamente deve haver uma maneira.

Foi útil?

Solução

Inicialmente tem o valor padrão key como None e na função, se key é None, então você pode definir o valor padrão, como quiser.

def Tester(self, key=None):
    if key is None:
        key = self.FALSE

Além disso, você não precisa de ponto e vírgula em Python, como precisamos em C/C++/JAVA.

Outras dicas

Não há como, porque os atributos da instância não existem até que uma instância seja criada, mas os métodos são definidos quando a classe é criada, antes de existir qualquer instância.Ou seja, dizer (como você fez na sua pergunta) que "a classe possui uma variável de instância" está incorreto.A classe não tem tal coisa;apenas as instâncias possuem essa variável e somente se e quando forem criadas.

Você deve fazer o que thefourtheye sugere e atribuir um padrão dentro do corpo do método.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top