Uma comparação de 'this' em JavaScript e 'self' em Python

Dec 19 2022
Na programação orientada a objetos, this e self são usados ​​para se referir à instância atual do objeto em que um método está sendo chamado. Um objeto é uma estrutura de dados que contém campos de dados e métodos.
Foto por Di Bella Café

Na programação orientada a objetos, thise selfsão usados ​​para se referir à instância atual do objeto em que um método está sendo chamado.

Um objeto é uma estrutura de dados que contém campos de dados e métodos. Um objeto representa uma instância específica de uma classe, que é um modelo ou projeto para a criação de objetos.

Um método é uma função que está associada a um objeto e é usada para executar alguma ação ou computação no objeto. Os métodos são definidos em uma definição de classe e podem ser chamados em um objeto para executar uma tarefa específica.

Em JavaScript, a palavra- thischave se refere ao objeto atual que está executando a função atual. É uma maneira de acessar as propriedades e métodos de um objeto de dentro do próprio objeto. O valor de thisé determinado por como uma função é chamada.

Aqui está um exemplo de como thisé usado em JavaScript:

const person = {
  name: 'John',
  sayHi: function() {
    console.log(`Hi, my name is ${this.name}`);
  }
}

person.sayHi(); // Output: "Hi, my name is John"

Em Python, o selfparâmetro é usado para se referir à instância de uma classe. É equivalente a thisoutras linguagens orientadas a objetos. O selfparâmetro é usado para acessar os atributos e métodos de uma classe dentro da própria classe.

E aqui está um exemplo de como selfé usado em Python:

class Person:
  def __init__(self, name):
    self.name = name
  
  def say_hi(self):
    print(f"Hi, my name is {self.name}")

person = Person("John")
person.say_hi() # Output: "Hi, my name is John"

Um bug comum que pode ocorrer ao usar o selfparâmetro em Python é esquecer de incluí-lo como o primeiro parâmetro em uma definição de método. Isso pode fazer TypeErrorcom que a seja gerado quando o método é chamado, porque o método está esperando que o selfparâmetro seja passado.

Aqui está um exemplo desse tipo de bug:

class Person:
  def __init__(self, name):
    self.name = name
  
  def say_hi(): // missing self parameter
    print(f"Hi, my name is {self.name}") 

person = Person("John")
person.say_hi()

Para corrigir esse bug, precisamos incluir o selfparâmetro na definição do método assim:

def say_hi(self):
    print(f"Hi, my name is {self.name}")

Depurando JavaScript

Um bug comum que pode ocorrer ao usar a palavra- thischave em JavaScript é usar thisdentro de uma função que não está vinculada a um objeto. Nesse caso, o valor de thisserá definido como o objeto global, o que pode levar a um comportamento inesperado.

Aqui está um exemplo desse tipo de bug:

const person = {
  name: 'John',
  sayHi: function() {
    console.log(`Hi, my name is ${this.name}`);
  }
}

const greet = person.sayHi;
greet(); // Output: "Hi, my name is undefined"

Quando chamamos a greetfunção, o valor de thisdentro da função é definido como o objeto global, que não possui uma namepropriedade. Como resultado, a saudação registra undefinedem vez do valor esperado.

Para corrigir esse bug, podemos vincular o valor de thisao personobjeto ao criar a greetvariável ou podemos usar uma função de seta para o sayHimétodo, que não possui seu próprio thisvalor e usa o thisvalor do contexto circundante.

Aqui está como poderíamos corrigir o exemplo usando o bindmétodo:

const person = {
  name: 'John',
  sayHi: function() {
    console.log(`Hi, my name is ${this.name}`);
  }
}

const greet = person.sayHi.bind(person);
greet(); // Output: "Hi, my name is John"

const person = {
  name: 'John',
  sayHi: () => {
    console.log(`Hi, my name is ${this.name}`);
  }
}

const greet = person.sayHi;
greet(); // Output: "Hi, my name is John"

Em JavaScript, a thispalavra-chave é usada para acessar as propriedades e métodos de um objeto de dentro do próprio objeto. Entender como o valor de thisé determinado e como usá-lo corretamente é essencial para trabalhar com objetos em JavaScript.

Em Python, o selfparâmetro é usado para referenciar a instância de uma classe e acessar seus atributos e métodos. Entender como usar o selfparâmetro corretamente é essencial para trabalhar com classes e programação orientada a objetos em Python.

Sem uma compreensão adequada de thisJavaScript e selfPython, é difícil escrever um código correto e sustentável que use objetos e classes.

Leia meu outro post ' Algumas coisas sobre JavaScript e Python ' para mais semelhanças e diferenças entre as duas linguagens de programação.

Obrigado por ler e espero que você tenha achado isso útil. Estou aberto a comentários e se você encontrar um erro, por favor, me avise.