Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions docs/basic/abstract-method.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
sidebar_position: 42
title: A.42. Python OOP ➜ Abstract Method
sidebar_label: A.42. OOP ➜ Abstract Method
sidebar_position: 43
title: A.43. Python OOP ➜ Abstract Method
sidebar_label: A.43. OOP ➜ Abstract Method
---

Pada chapter ini kita akan mempelajari tentang apa itu abstract method beserta bagaimana penerapannya pada pemrograman OOP menggunakan Python.

## A.42.1. Pengenalan abstract method
## A.43.1. Pengenalan abstract method

Abstract method merupakan jenis method yang dideklarasikan dengan isi tidak melakukan apa-apa, hanya statement `pass`. Nantinya ketika class (dimana method tersebut berada) di-inherit ke sub class lain, maka sub-class harus meng-override method milik super class tersebut.

Expand Down Expand Up @@ -78,7 +78,7 @@ Kode di atas ketika di-run tidak menghasilkan error, berjalan normal, hanya saja

Di *real life*, ukuran source code yang kita maintain bisa saja berisi ratusan atau bahkan puluhan ribu baris dengan jumlah file sangat banyak. Di case yang seperti itu cukup susah mengecek mana class yang implementasinya sudah sesuai spesifikasi dan mana yang belum, karena saat program dijalankan tidak ada error atau warning. Untuk mengatasi masalah tersebut, solusinya adalah dengan mengimplementasikan abstract method.

## A.42.2. Praktek abstract method
## A.43.2. Praktek abstract method

Di Python versi 3.4+, suatu method menjadi abstract method ketika memenuhi kriteria berikut:

Expand Down
14 changes: 7 additions & 7 deletions docs/basic/class-constructor.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
sidebar_position: 35
title: A.35. Python OOP ➜ Constructor
sidebar_label: A.35. OOP ➜ Constructor
sidebar_position: 36
title: A.36. Python OOP ➜ Constructor
sidebar_label: A.36. OOP ➜ Constructor
---

Constructor/konstruktor adalah salah satu topik penting dalam pemrograman berbasis object (OOP). Konstruktor sendiri adalah fungsi khusus yang dipanggil saat pembuatan object dilakukan dari suatu class.

Pada chapter ini kita akan belajar tentang konstruktor dan apa saja yang bisa dilakukan didalamnya.

## A.35.1. Pengenalan constructor
## A.36.1. Pengenalan constructor

Di bahasa yang mengadopsi konsep OOP, setiap class memiliki *default constructor*. Sebagai contoh pada statement pembuatan object bertipe class `Car`, syntax `Car()` digunakan dan syntax tersebut merupakan contoh penerapan pengaksesan konstruktor.

Expand Down Expand Up @@ -72,7 +72,7 @@ mount_kilimanjaro.info()

Pada contoh di atas, konstruktor `__init__(self)` meng-override default constructor milik class `Mountain` dan digunakan untuk deklarasi instance attribute.

## A.35.2. Constructor dengan custom param
## A.36.2. Constructor dengan custom param

Konstruktor dapat didesain untuk memiliki parameter, dan metode ini sangat umum diterapkan.

Expand Down Expand Up @@ -109,7 +109,7 @@ mount_kilimanjaro.info()

Seperti halnya method, parameter pertama konstruktor harus `self`. Dari sini bisa disimpulkan berarti penambahan parameter harus dituliskan setelah `self`. Bisa dilihat di deklarasi konstruktor class `Mountain`, disitu ada tiga buah parameter dideklarasikan setelah `self`.

## A.35.3. Constructor overloading
## A.36.3. Constructor overloading

Overloading merupakan istilah OOP untuk pembuatan banyak konstruktor dengan jumlah dan tipe parameter berbeda.

Expand Down Expand Up @@ -160,7 +160,7 @@ Penjelasan:

Silakan coba explore dengan mempraktekan penggunaan \*args / \*\*kwargs pada konstruktor.

## A.35.4. Constructor dengan return type `None`
## A.36.4. Constructor dengan return type `None`

Constructor dipanggil saat inisialisasi object, maka bisa dibilang bahwa constructor tersebut selalu mengembalikan tipe data bertipe class dimana constructor tersebut dideklarasikan.

Expand Down
26 changes: 13 additions & 13 deletions docs/basic/class-inheritance.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
sidebar_position: 41
title: A.41. Python OOP ➜ Class Inheritance
sidebar_label: A.41. OOP ➜ Class Inheritance
sidebar_position: 42
title: A.42. Python OOP ➜ Class Inheritance
sidebar_label: A.42. OOP ➜ Class Inheritance
---

Chapter ini membahas tentang salah satu aspek penting dalam pemrograman OOP, yaitu inheritance atau pewarisan sifat, dimana sifat yang dimaksud adalah property seperti attribute, method, dan lainnya.

## A.41.1. Pengenalan Inheritance
## A.42.1. Pengenalan Inheritance

Untuk mewujudkan inheritance setidaknya dua buah class dibutuhkan:

Expand Down Expand Up @@ -89,7 +89,7 @@ v3.info()

Bisa dilihat dari contoh, bahwa property milik class `Vehicle` bisa diakses via instance object yang dibuat dari class itu sendiri maupun dari object yang dibuat dari subclass `ElectricCar`.

## A.41.2. Class `object` inheritance
## A.42.2. Class `object` inheritance

Python memiliki class bawaan bernama `object` yang pada praktiknya otomatis menjadi super class dari semua class bawaan Python maupun custom class yang kita buat sendiri.

Expand Down Expand Up @@ -136,7 +136,7 @@ if isinstance(v2, object):
# v2 class inherit from class object
```

## A.41.3. Constructor overriding
## A.42.3. Constructor overriding

*Overriding* adalah istilah pemrograman OOP untuk menimpa/mengganti suatu method dengan method baru yang nama dan strukturnya sama tapi isinya berbeda.

Expand Down Expand Up @@ -203,7 +203,7 @@ AttributeError: 'ElectricCar' object has no attribute 'number_of_wheels'

Solusi permasalahan di atas ada pada penjelasan section berikut ini.

## A.41.4. Fungsi `super()`
## A.42.4. Fungsi `super()`

Fungsi `super()` adalah salah satu fungsi istimewa bawaan python, yang ketika diakses di dalam suatu instance method maka pemanggilannya mengarah ke variabel `self` milik super class (bukan variabel `self` milik class itu sendiri).

Expand Down Expand Up @@ -281,7 +281,7 @@ Jika dianalogikan, bisa dibilang kode di atas adalah ekuivalen dengan kode ke-2

Sampai sini semoga cukup jelas.

## A.41.5. Alternatif cara mengakses super class constructor
## A.42.5. Alternatif cara mengakses super class constructor

Selain menggunakan `super().__init__()` ada cara lain untuk memanggil konstruktor super class, yaitu dengan mengakses method `__init__()` via class secara langsung. Contoh:

Expand Down Expand Up @@ -309,7 +309,7 @@ Statement `Vehicle.__init__(self)` pada kode di atas adalah ekuivalen dengan kod

Teknik pemanggilan constructor via class ini lebih sering digunakan pada class yang memiliki parent class lebih dari satu. Lebih jelasnya akan kita bahas di bawah.

## A.41.6. Method overriding
## A.42.6. Method overriding

Tidak hanya constructor, method super class juga bisa di-override dengan method baru. Pada kode berikut, method `drive_sound()` di-override dengan isi mengembalikan nilai string berbeda, yang sebelumnya `vroom vroooommmm` kini menjadi `zzzzzzz`.

Expand Down Expand Up @@ -353,7 +353,7 @@ Dalam konteks inheritance, ketika di sub class terdapat method dengan nama yang
- Object `v1` dibuat via class `Vehicle`, pengaksesan method `drive_sound()` mengarah ke method milik class tersebut
- Object `v2` dibuat via class `ElectricCar`, pengaksesan method `drive_sound()` (yang dilakukan secara implisit via method `info()`) mengarah ke method milik class tersebut, dan bukan milik super class.

## A.41.7. Aturan overriding
## A.42.7. Aturan overriding

Setiap bahasa pemrograman yang mengadopsi OOP, aturan penerapan method overriding berbeda satu sama lain. Di Python sendiri, method dianggap meng-override suatu method atau constructor super class jika namanya adalah dideklarasikan sama persis. Perihal apakah skema parameter-nya diubah, atau return type-nya diubah, itu tidak menjadi syarat wajib overriding.

Expand Down Expand Up @@ -392,7 +392,7 @@ v2.info()

Method `drive_sound()` di-override dengan diubah skema parameternya, dari yang tidak memiliki parameter sekarang menjadi memiliki parameter `sound`. Selain itu tipe datanya juga diubah, dari yang sebelumnya string menjadi tuple.

## A.41.8. Nested inheritance
## A.42.8. Nested inheritance

Penerapan inheritance tidak hanya terbatas pada dua buah class saja, melainkan bisa lebih. Class bisa diturunkan, kemudian turunannya diturunkan lagi, dan seterusnya.

Expand Down Expand Up @@ -440,7 +440,7 @@ v3.info()
# output ➜ electric car has 4 wheels. engine sound: ('friendly sound', 'zzzzzzz')
```

## A.41.9. Special name ➜ class attribute `__mro__`
## A.42.9. Special name ➜ class attribute `__mro__`

Setiap class memiliki class attribute `__mro__` yang berisi informasi hirarki class itu sendiri. Attribute tersebut bertipe data tuple. Dari nilai balik attribute tersebut gunakan perulangan untuk mengiterasi seluruh elemennya.

Expand Down Expand Up @@ -479,7 +479,7 @@ Hirarki paling atas semua class selalu class `object`.

> MRO sendiri merupakan kependekan dari istilah **Method Resolution Order**

## A.41.10. Multiple inheritance
## A.42.10. Multiple inheritance

Suatu class tidak dibatasi hanya bisa menjadi sub class dari 1 buah class saja. Bisa jadi ada lebih dari 1 class yang diturunkan dengan level hirarki yang sama.

Expand Down
18 changes: 9 additions & 9 deletions docs/basic/class-method.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
sidebar_position: 38
title: A.38. Python OOP ➜ Class Method
sidebar_label: A.38. OOP ➜ Class Method
sidebar_position: 39
title: A.39. Python OOP ➜ Class Method
sidebar_label: A.39. OOP ➜ Class Method
---

Pada chapter ini kita akan belajar tentang jenis method lain yang tersedia di Python, yaitu class method, serta perbedaannya dibanding instance method dan constructor.

## A.38.1. Pengenalan Class method
## A.39.1. Pengenalan Class method

Class method adalah method yang pemiliknya adalah class dengan pengaksesan adalah via class, berbeda dibanding instance method yang diperuntukan untuk instance object. Jika instance method memiliki parameter `self` yang isinya adalah instance object, maka class method memiliki parameter `cls` yang isinya adalah tipe data class.

Expand Down Expand Up @@ -70,7 +70,7 @@ p3.info()

> Parameter `cls` bisa disebut dengan parameter *implicit* atau implisit karena kita tidak berinteraksi secara langsung saat pengisian nilai. Nilai `cls` otomatis terisi saat class method diakses.

## A.38.2. Class method parameter
## A.39.2. Class method parameter

Class method juga bisa memiliki parameter seperti umumnya fungsi. Jika pada instance method dan constructor parameter adalah ditulis setelah `self`, pada class method parameter ditulis setelah `cls`. Contoh:

Expand Down Expand Up @@ -141,7 +141,7 @@ Sebagai perbandingan, kedua bentuk pemanggilan constructor via `cls()` berikut a
return obj
```

## A.38.3. Pengaksesan class method via instance object
## A.39.3. Pengaksesan class method via instance object

Sampai sini penulis rasa bisa dipahami perbedaan cara pengaksesan antara instance method dan class method. Instance method diakses via instance object, dan class method diakses via class.

Expand Down Expand Up @@ -185,7 +185,7 @@ Dari kode di atas bisa dilihat perbedaan dari sisi pembuatan object dan pengakse

Yang menarik untuk dibahas adalah `p5`. Object `p5` dibuat dari pemanggilan class method `create()` namun pengaksesannya adalah via instance object `p2`. Penulisan seperti itu diperbolehkan. Parameter `cls` pada class method `create()` akan terisi dengan nilai tipe data class object `p2` (yaitu `ClanHouse`).

## A.38.4. Pengaksesan instance method via class
## A.39.4. Pengaksesan instance method via class

Jika class method bisa diakses via instance object, instance method juga bisa diakses via Class. Caranya cukup panggil instance method via class lalu isi parameter `self` dengan instance object. Contoh:

Expand All @@ -205,7 +205,7 @@ ClanHouse.info(p5)

Pengaksesan instance method via class mengharuskan parameter `self` milik method untuk diisi dengan object. Hal ini berbeda dibanding pengaksesan instance method via instance object dimana parameter `self` otomatis terisi nilai instance object.

## A.38.5. Pengaksesan class attribute via `cls`
## A.39.5. Pengaksesan class attribute via `cls`

Pada chapter sebelumnya, [OOP ➜ Instance Attribute & Class Attribute](/basic/instance-attribute-class-attribute), kita telah mempelajari tentang perbedaan instance attribute dibanding class attribute.

Expand Down Expand Up @@ -241,7 +241,7 @@ Output program:

![class method](img/class-method-1.png)

## A.38.6. Summary
## A.39.6. Summary

Dari banyak hal yang telah dipelajari di chapter ini, secara garis besar perbedaan antara constructor, instance method, dan class method bisa dilihat di bawah ini:

Expand Down
18 changes: 9 additions & 9 deletions docs/basic/class-object.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
sidebar_position: 33
title: A.33. Python OOP ➜ Class & Object
sidebar_label: A.33. OOP ➜ Class & Object
sidebar_position: 34
title: A.34. Python OOP ➜ Class & Object
sidebar_label: A.34. OOP ➜ Class & Object
---

Python mendukung paradigma pemrograman berbasis objek (OOP) melalui implementasi Class dan Object API. Pada bab ini, kita akan mempelajari konsep dasar beserta penerapannya.

> Pembahasan OOP pada ebook ini lebih fokus pada pengaplikasiannya di Python. Jadi pembahasan teorinya tidak terlalu banyak.

## A.33.1. Pengenalan Class
## A.34.1. Pengenalan Class

Class adalah *blueprint* untuk membuat variabel, class bisa diartikan juga sebagai tipe data. Di Python, setiap data pasti memiliki tipe data yang tipe tersebut adalah class. Sebagai contoh:

Expand Down Expand Up @@ -56,11 +56,11 @@ class Car:

> Pembahasan detail mengenai keyword `pass` ada di chapter [Function section Keyword pass](/basic/function#a225-keyword-pass)

## A.33.2. Naming convention class
## A.34.2. Naming convention class

Berdasarkan dokumentasi [PEP 8 – Style Guide for Python Code](https://peps.python.org/pep-0008/), disarankan untuk menulis nama class dalam bentuk TitleCase, contoh: `FavoriteFood`.

## A.33.3. Pembuatan Instance object
## A.34.3. Pembuatan Instance object

Object (atau instance object) adalah variabel yang dibuat dari class. Cara pembuatan object adalah dengan memanggil nama class diikuti oleh tanda kurung fungsi `()` (seperti pemanggilan fungsi). Statement tersebut mengembalikan nilai balik berupa object baru yang bertipe data sesuai dengan class yang digunakan.

Expand Down Expand Up @@ -104,7 +104,7 @@ car2 = Car()
car3 = Car()
```

## A.33.4. Instance Attribute
## A.34.4. Instance Attribute

Salah satu property class adalah attribute. Attribute adalah variabel yang terasosiasi dengan class, jadi dalam pengaksesannya harus dilakukan melalui class dan/atau instance object.

Expand Down Expand Up @@ -175,7 +175,7 @@ Jalankan program untuk melihat outputnya:
>
> Perbedaan utama dari keduanya adalah pada dictionary key-nya bisa dikelola secara dinamis, sedangkan pada class nama attribute-nya adalah fixed.

## A.33.5. Pengecekan instance object
## A.34.5. Pengecekan instance object

Fungsi `isinstance()` cukup berguna untuk mengecek apakah suatu instance object tipe datanya adalah class tertentu atau class yang meng-*inherit* class tertentu.

Expand All @@ -192,7 +192,7 @@ if isinstance(car1, Car):
# output ➜ car1 class is Car
```

## A.33.6. Class turunan `object`
## A.34.6. Class turunan `object`

Setiap class yang ada di Python baik itu class bawaan Python Standard Library ataupun custom class, secara otomatis adalah turunan dari class bernama `object`.

Expand Down
10 changes: 5 additions & 5 deletions docs/basic/cli-arguments-flags.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
sidebar_position: 50
title: A.50. Python CLI Arguments & Flags
sidebar_label: A.50. CLI Arguments & Flags
sidebar_position: 51
title: A.51. Python CLI Arguments & Flags
sidebar_label: A.51. CLI Arguments & Flags
---

Chapter ini membahas tentang pengaksesan CLI argument eksekusi program Python. Yang dimaksud dengan argument adalah apapun yang ditulis setelah command `python` (atau `python.exe` di Windows). Umumnya program yang dibuat untuk keperluan tooling ataupun utility lainnya banyak memanfaatkan *command line interface* arguments ini.

Python mengenal 2 jenis CLI arguments, yaitu raw arguments (atau cukup arguments) dan flags, keduanya dibahas di sini.

## A.50.1. CLI arguments `sys.argv`
## A.51.1. CLI arguments `sys.argv`

Data CLI argument eksekusi program bisa diakses via `sys.argv`. Variabel `sys.argv` ini berisi data argument bertipe string tersimpan dalam list.

Expand Down Expand Up @@ -87,7 +87,7 @@ Output program:

![Python CLI Arguments & Flags](img/cli-arguments-flags-2.png)

## A.50.2. CLI flags `argparse`
## A.51.2. CLI flags `argparse`

Flags adalah istilah untuk argument dengan label. Contohnya seperti `python main.py --name Noval` adalah contoh pengaplikasian flag, dengan label adalah `--name` berisi data string `Noval`.

Expand Down
16 changes: 8 additions & 8 deletions docs/basic/csv.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
sidebar_position: 51
title: A.51. Python CSV File/Data Format
sidebar_label: A.51. File/Data Format ➜ CSV
sidebar_position: 52
title: A.52. Python CSV File/Data Format
sidebar_label: A.52. File/Data Format ➜ CSV
---

Pada chapter ini kita akan belajar tentang penggunaan Python untuk membaca dan mengelola data CSV.
Expand All @@ -27,7 +27,7 @@ Penjelasan singkat tentang CSV:

:::

## A.51.1. Implementasi CSV di Python
## A.52.1. Implementasi CSV di Python

Python menyediakan beberapa API untuk berinteraksi dengan data CSV, ada `csv.DictWriter()` dan `csv.writer()` untuk operasi tulis data, dan `csv.DictReader()` dan `csv.reader()` untuk operasi baca data.

Expand Down Expand Up @@ -72,7 +72,7 @@ Program yang dibuat adalah aplikasi CLI interaktif, dimana user bisa berinteraks

Selanjutnya, program dimodifikasi dengan penambahan implementasi untuk masing-masing mode.

## A.51.2. Insert data CSV
## A.52.2. Insert data CSV

Sebuah file CSV akan dibuat dan difungsikan sebagai *database* untuk penyimpanan data yang di-insert via program. File CSV berisi 3 buah kolom data point:

Expand Down Expand Up @@ -167,7 +167,7 @@ Jalankan program lalu coba test fungsionalitasnya dengan insert beberapa data. B

![Python CSV](img/csv-2.png)

## A.51.3. Read data CSV
## A.52.3. Read data CSV

Operasi baca data dilakukan via fungsi `csv.DictReader()` dengan argument parameter adalah object file. Lewat object reader, gunakan fungsi `enumerate()` untuk membungkusnya lalu lakukan iterasi menggunakan keyword `for`. Lebih jelasnya silakan lihat kode `read_data()` berikut, dan tak lupa tambahkan ke program.

Expand Down Expand Up @@ -212,7 +212,7 @@ Sekarang jalankan program untuk pengetesan.

Bisa dilihat isi data yang muncul via pemanggilan fungsi `read_data()` sesuai dengan data yang di-insert.

## A.51.4. Delete data CSV
## A.52.4. Delete data CSV

Operasi delete data bisa dilakukan dengan menuliskan ulang isi file CSV tetapi meng-exclude data yang ingin dihapus. Kurang lebih kodenya seperti ini:

Expand Down Expand Up @@ -274,7 +274,7 @@ Jalankan ulang program, test fungsionalitas mode 1, 2, dan 3.

Kurang lebih seperti itu penerapan operasi CSV di Python. Silakan lanjut explore dan praktek dengan pembuatan program sejenis lainnya agar makin paham.

## A.51.5. `csv.writer()` dan `csv.reader()`
## A.52.5. `csv.writer()` dan `csv.reader()`

Selain menggunakan fungsi `csv.DictWriter()` dan `csv.DictReader()`, operasi baca tulis CSV bisa dilakukan menggunakan fungsi `csv.writer()` dan `csv.reader()`.

Expand Down
Loading
Loading