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 Person
classe:
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 Person
classe 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 à Person
classe.
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@classmethod
decorador mudará um método de instância para um método de classe. - Segundo, renomeie o
self
parâmetro paracls
. Ocls
significadoclass
. No entanto,class
é uma palavra-chave, portanto você não pode usá-la como parâmetro.
O seguinte mostra a nova versão da Person
classe:
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 cls
variá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 Person
classe.
Resumo
- Os métodos de classe Python não estão vinculados a nenhuma instância específica, mas a classes.
- Use
@classmethod
o decorador para alterar um método de instância para um método de classe. Além disso, passe thecls
como primeiro parâmetro para o método de classe. - Use métodos de classe para métodos de fábrica.