Analog dengan Python dan JavaScript. Bagian empat

Bagian keempat dari serangkaian artikel tentang analog dengan Python dan JavaScript.


Di bagian ini: argumen fungsi, membuat dan bekerja dengan kelas, pewarisan, pengambil setter, dan properti kelas.


Ringkasan bagian sebelumnya:


  1. Bagian satu : konversi jenis, operator ternary, akses ke properti dengan nama properti, kamus, daftar, string, rangkaian string.
  2. Bagian dua : JSON, pelanggan tetap, kesalahan pengecualian
  3. Bagian Tiga : Python dan JS modern: pola string (f-lines), daftar membongkar, fungsi lambda, daftar iterasi, generator, set.

Argumen fungsi


Python memiliki toolkit yang luas untuk bekerja dengan argumen fungsi - ada nilai default, sejumlah variabel posisi dan argumen bernama ( *args dan **kwargs ).


Saat Anda meneruskan nilai ke suatu fungsi, Anda bisa menentukan nama argumen tempat nilai itu akan diteruskan. JS juga memiliki fitur ini.


Nilai default untuk argumen fungsi dapat didefinisikan dalam 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') 

Di JS, sama:


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

Argumen posisi dalam Python dapat diproses menggunakan operator * :


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

Di JS, argumen posisi diproses menggunakan operator ... :


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

Argumen yang dinamai sering digunakan dalam Python ketika Anda harus memberikan sejumlah variabel argumen:


 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.', ) 

Melewati serangkaian argumen bernama ke JS diimplementasikan menggunakan kamus ( options dalam contoh ini):


 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.' }); 

Kelas dan Waris


Python adalah bahasa berorientasi objek. Dimulai dengan ECMAScript 6, JS juga memungkinkan Anda untuk menulis kode berorientasi objek tanpa trik dan sintaksis.


Python Kami membuat kelas, konstruktor, dan metode untuk representasi teks objek:


 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! 

Tindakan serupa di 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! 

Buat dua kelas Article dan Link dalam Python yang akan mewarisi dari kelas Post . Anda mungkin memperhatikan bahwa kami menggunakan fungsi super untuk mengakses metode kelas dasar 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) 

Hal yang sama di 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) 

Properti kelas: getter dan setter.


Dalam pemrograman berorientasi objek, kelas memiliki atribut, metode, dan properti. Properti adalah campuran atribut dan metode. Anda dapat memperlakukan properti sebagai atribut, tetapi di suatu tempat di dalamnya mereka memanggil metode khusus yang disebut getter / setter untuk pemrosesan data tertentu.
Dalam contoh ini, Python menunjukkan cara dasar untuk menggambarkan pengambil dan penyetel untuk properti slug menggunakan dekorator:


 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) 

Di JS, pengambil dan penyetel untuk properti slug dapat digambarkan sebagai:


 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); 

Kesimpulan


  • Dalam kedua bahasa, Anda bisa mendeskripsikan nilai default argumen fungsi.
  • Dalam kedua bahasa, Anda bisa meneruskan sejumlah argumen nama atau posisi yang sewenang-wenang ke suatu fungsi.
  • Kedua bahasa mendukung paradigma pemrograman berorientasi objek.

Nah, dan akhirnya, penulis posting asli menawarkan untuk membeli darinya pdfku dengan lembar contekan berwarna untuk python dan javascript seharga lima belas dolar .


Cetak dan gantung di dinding atau buat pesawat kertas - Anda yang memutuskan!

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


All Articles