Métodos de classe Python

Resumo : neste tutorial, você aprenderá sobre os métodos de classe Python e quando usá-los adequadamente.

Introdução aos métodos de classe Python

Até agora, você aprendeu sobre métodos de instância vinculados a uma instância específica de uma classe .

Os métodos de instância podem acessar variáveis ​​de instância dentro da mesma classe. Para invocar métodos de instância, você precisa primeiro criar uma instância da classe .

O seguinte define a Personclasse:

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"

    def introduce(self):
        return f"Hi. I'm {self.first_name} {self.last_name}. I'm {self.age} years old."Linguagem de código:  Python  ( python )

A Personclasse tem três métodos de instância, incluindo __init__(), get_full_name()e introduce().

Suponha que você queira adicionar um método que crie uma pessoa anônima à Personclasse.

Para fazer isso, você criaria o seguinte código:

class Person:
    # ... other methods
    def create_anonymous(self):
        return Person('John', 'Doe', 25)
Linguagem de código:  Python  ( python )

O create_anonymous()é um método de instância que retorna uma pessoa anônima.

Porém, para invocar o create_anonymous()método, é necessário criar uma instância, o que não faz sentido neste caso.

É por isso que os métodos de classe Python entram em ação.

Um método de classe não está vinculado a nenhuma instância específica. Está vinculado apenas à classe.

Para definir um método de classe:

  • Primeiro coloque o @classmethod decorador acima da definição do método. Por enquanto, você só precisa entender que o @classmethoddecorador mudará um método de instância para um método de classe.
  • Segundo, renomeie o selfparâmetro para cls. O clssignificado class. No entanto, classé uma palavra-chave, portanto você não pode usá-la como parâmetro.

O seguinte mostra a nova versão da Personclasse:

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"

    def introduce(self):
        return f"Hi. I'm {self.first_name} {self.last_name}. I'm {self.age} years old."

    @classmethod
    def create_anonymous(cls):
        return Person('John', 'Doe', 25)
Linguagem de código:  Python  ( python )

O create_anonymous()método não pode acessar atributos de instância. Mas pode acessar atributos de classe através da clsvariável.

Chamando métodos de classe Python

Para chamar um método de classe, você usa o nome da classe, seguido por um ponto, e então o nome do método assim:

ClassName.method_name()Linguagem de código:  Python  ( python )

O exemplo a seguir mostra como chamar o create_anonymous()método de classe da classe Person:

anonymous = Person.create_anonymous()
print(anonymous.introduce())
Linguagem de código:  Python  ( python )

Saída:

Hi. I'm John Doe. I'm 25 years old.Linguagem de código:  Python  ( python )

Métodos de classe versus métodos de instância

A tabela a seguir ilustra as diferenças entre métodos de classe e métodos de instância:

Características métodos de classe Métodos de instância
Vinculativo Aula Uma instância da classe
Chamando Class.method() object.method()
Acessando Atributos de classe Atributos de instância e classe

Quando usar métodos de classe Python

Você pode usar métodos de classe para quaisquer métodos que não estejam vinculados a uma instância específica, mas à classe. Na prática, você costuma usar métodos de classe para métodos que criam uma instância da classe.

Quando um método cria uma instância da classe e a retorna, o método é chamado de método de fábrica . Por exemplo, create_anonymous()é um método de fábrica porque retorna uma nova instância da Personclasse.

Resumo

  • Os métodos de classe Python não estão vinculados a nenhuma instância específica, mas a classes.
  • Use @classmethodo decorador para alterar um método de instância para um método de classe. Além disso, passe the clscomo primeiro parâmetro para o método de classe.
  • Use métodos de classe para métodos de fábrica.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *