Análogos em Python e JavaScript. Parte quatro

A quarta parte de uma série de artigos sobre análogos em Python e JavaScript.


Nesta parte: argumentos da função, criando e trabalhando com classes, herança, getter setter e propriedades da classe.


Resumo das partes anteriores:


  1. Parte um : conversão de tipo, operador ternário, acesso a uma propriedade pelo nome da propriedade, dicionários, listas, cadeias de caracteres, concatenação de cadeias.
  2. Parte dois : JSON, regulares, erros de exceção
  3. Parte três : Python e JS modernos: padrões de strings (linhas-f), desempacotamento de lista, funções lambda, iterações de lista, geradores, conjuntos.

Argumentos de Função


O Python possui um extenso kit de ferramentas para trabalhar com argumentos de função - existem valores padrão, um número variável de argumentos posicionais e nomeados ( *args e **kwargs ).


Quando você passa um valor para uma função, pode especificar o nome do argumento para o qual esse valor será passado. JS também tem esse recurso.


Os valores padrão para argumentos de função podem ser definidos em Python:


 from pprint import pprint def report(post_id, reason='not-relevant'): pprint({'post_id': post_id, 'reason': reason}) report(42) report(post_id=24, reason='spam') 

Em JS, da mesma forma:


 function report(post_id, reason='not-relevant') { console.log({post_id: post_id, reason: reason}); } report(42); report(post_id=24, reason='spam'); 

Argumentos posicionais em Python podem ser processados ​​usando o operador * :


 from pprint import pprint def add_tags(post_id, *tags): pprint({'post_id': post_id, 'tags': tags}) add_tags(42, 'python', 'javascript', 'django') 

Em JS, argumentos posicionais são processados ​​usando o operador ... :


 function add_tags(post_id, ...tags) { console.log({post_id: post_id, tags: tags}); } add_tags(42, 'python', 'javascript', 'django'); 

Argumentos nomeados são frequentemente usados ​​no Python quando você precisa passar um número variável de argumentos:


 from pprint import pprint def create_post(**options): pprint(options) create_post( title='Hello, World!', content='This is our first post.', is_published=True, ) create_post( title='Hello again!', content='This is our second post.', ) 

A passagem de um conjunto de argumentos nomeados para JS é implementada usando um dicionário ( options neste exemplo):


 function create_post(options) { console.log(options); } create_post({ 'title': 'Hello, World!', 'content': 'This is our first post.', 'is_published': true }); create_post({ 'title': 'Hello again!', 'content': 'This is our second post.' }); 

Classes e Herança


Python é uma linguagem orientada a objetos. A partir do ECMAScript 6, o JS também permite escrever código orientado a objetos sem nenhum truque e sintaxe.


Python Criamos uma classe, construtor e método para a representação textual do objeto:


 class Post(object): def __init__(self, id, title): self.id = id self.title = title def __str__(self): return self.title post = Post(42, 'Hello, World!') isinstance(post, Post) == True print(post) # Hello, World! 

Ações semelhantes em JS:


 class Post { constructor (id, title) { this.id = id; this.title = title; } toString() { return this.title; } } post = new Post(42, 'Hello, World!'); post instanceof Post === true; console.log(post.toString()); // Hello, World! 

Crie duas classes Article e Link em Python que herdarão da classe Post . Você pode notar que usamos a super acessar os métodos da classe base Post :


 class Article(Post): def __init__(self, id, title, content): super(Article, self).__init__(id, title) self.content = content class Link(Post): def __init__(self, id, title, url): super(Link, self).__init__(id, title) self.url = url def __str__(self): return '{} ({})'.format( super(Link, self).__str__(), self.url, ) article = Article(1, 'Hello, World!', 'This is my first article.') link = Link(2, 'DjangoTricks', 'https://djangotricks.blogspot.com') isinstance(article, Post) == True isinstance(link, Post) == True print(link) # DjangoTricks (https://djangotricks.blogspot.com) 

A mesma coisa no JS:


 class Article extends Post { constructor (id, title, content) { super(id, title); this.content = content; } } class Link extends Post { constructor (id, title, url) { super(id, title); this.url = url; } toString() { return super.toString() + ' (' + this.url + ')'; } } article = new Article(1, 'Hello, World!', 'This is my first article.'); link = new Link(2, 'DjangoTricks', 'https://djangotricks.blogspot.com'); article instanceof Post === true; link instanceof Post === true; console.log(link.toString()); // DjangoTricks (https://djangotricks.blogspot.com) 

Propriedades da classe: getters e setters.


Na programação orientada a objetos, as classes têm atributos, métodos e propriedades. Propriedades são uma mistura de atributos e métodos. Você pode tratar propriedades como atributos, mas em algum lugar interno elas chamam métodos especiais chamados getters / setters para processamento de dados específico.
Neste exemplo, o Python mostra a maneira básica de descrever o getter e o setter para a propriedade slug usando decoradores:


 class Post(object): def __init__(self, id, title): self.id = id self.title = title self._slug = '' @property def slug(self): return self._slug @slug.setter def slug(self, value): self._slug = value post = Post(1, 'Hello, World!') post.slug = 'hello-world' print(post.slug) 

Em JS, o getter e o setter para a propriedade slug podem ser descritos como:


 class Post { constructor (id, title) { this.id = id; this.title = title; this._slug = ''; } set slug(value) { this._slug = value; } get slug() { return this._slug; } } post = new Post(1, 'Hello, World!'); post.slug = 'hello-world'; console.log(post.slug); 

Conclusões


  • Nos dois idiomas, você pode descrever os valores padrão dos argumentos da função.
  • Nos dois idiomas, você pode passar um número arbitrário de argumentos nomeados ou posicionais para uma função.
  • Ambas as linguagens suportam um paradigma de programação orientada a objetos.

Bem, e finalmente, o autor do post original oferece a compra dele pdfku com folhas de dicas coloridas para python e javascript por quinze dólares .


Imprima e pendure na parede ou faça um avião de papel - você decide!

Source: https://habr.com/ru/post/pt419271/


All Articles