Last active
April 30, 2016 14:30
-
-
Save ihfazhillah/79e0c14f193ad39bcd860b85d5049eef to your computer and use it in GitHub Desktop.
Bermain main dengan return self
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
class Aritmatik(object): | |
"""Aritmatik sederhana. | |
Penggunaan: | |
Buat instance dahulu dari objek Aritmatik, mempunyai value | |
optional berupa *initial_int* bila anda tidak berikan maka | |
default adalah 0 | |
>>> aritmatik = Aritmatik(100) | |
Misalkan, kita ingin mengerjakan: | |
(100 + 3 - 10) * 2 : 1 | |
cara pengerjaan: | |
>>> aritmatik.tambah(3).kurang(10).kali(2).bagi(1) | |
penjelasan: | |
Kita tidak perlu memberikan angka 100, karena kita sudah inisiasi | |
diawal. | |
""" | |
def __init__(self, initial_int=0): | |
self.initial_int = initial_int | |
self.result = initial_int | |
def __repr__(self): | |
return str(self.result) | |
def __add__(self, num): | |
return self.result + num | |
def __mul__(self, num): | |
return self.result * num | |
def __sub__(self, num): | |
return self.result - num | |
def __truediv__(self, num): | |
# pakai __div__ akan mereturn error unsupported opperand | |
# maka disarankan untuk menggunakan __truediv__ | |
# http://stackoverflow.com/questions/22948699/typeerror-unsupported-operand-types-for-instance-and-instance-and-tr | |
return self.result / num | |
def tambah(self, num): | |
self.result += num | |
return self | |
def kali(self, num): | |
self.result *= num | |
return self | |
def kurang(self, num): | |
self.result -= num | |
return self | |
def bagi(self, num): | |
self.result //= num # -=> mereturn tanpa koma | |
return self | |
class AritmatikTestCase(unittest.TestCase): | |
def setUp(self): | |
self.iseng = Aritmatik(12) | |
def tearDown(self): | |
pass | |
def test_initial_int_is_12(self): | |
self.assertEqual(self.iseng.initial_int, 12) | |
def test_result_is_12(self): | |
self.assertEqual(self.iseng.result, 12) | |
def test_add_8_is_20(self): | |
result = self.iseng.tambah(8) | |
self.assertEqual(str(result), str(20)) | |
def test_add_then_multiply(self): | |
result = self.iseng.tambah(8).kali(2) | |
self.assertEqual(str(result), str(40)) | |
def test_tambah_kemudian_kurang(self): | |
result = self.iseng.tambah(4).kurang(5) | |
self.assertEqual(str(result), str(11)) | |
def test_tambah_kemudian_bagi(self): | |
result = self.iseng.tambah(4).bagi(8) | |
self.assertEqual(str(result), str(2)) | |
def test_kurang_kemudian_tambah(self): | |
result = self.iseng.kurang(2).tambah(5) | |
self.assertEqual(str(result), str(15)) | |
def test_kurang_kemudian_kali(self): | |
result = self.iseng.kurang(2).kali(50) | |
self.assertEqual(str(result), str(500)) | |
def test_kurang_kemudian_kurang(self): | |
result = self.iseng.kurang(10).kurang(2) | |
self.assertEqual(str(result), str(0)) | |
def test_kurang_kemudian_bagi(self): | |
result = self.iseng.kurang(2).bagi(2) | |
self.assertEqual(str(result), str(5)) | |
def test_kali_kemudian_tambah(self): | |
result = self.iseng.kali(2).tambah(6) | |
self.assertEqual(str(result), str(30)) | |
def test_hasil_ditambah_dengan_operator_tambah(self): | |
result = self.iseng.kali(1) + 2 | |
self.assertEqual(result, 14) | |
def test_hasil_dikali_dengan_operator_kali(self): | |
result = self.iseng.kurang(10) * 2 | |
self.assertEqual(result, 4) | |
def test_hasil_dikurang_dengan_operator_kurang(self): | |
result = self.iseng.bagi(6) - 1 | |
self.assertEqual(result, 1) | |
def test_hasil_dibagi_dengan_operator_bagi(self): | |
result = self.iseng.bagi(4) / 2 | |
self.assertEqual(result, 1.5) | |
# === shortcut === | |
aritmatik = Aritmatik() | |
if __name__ == "__main__": | |
a1 = aritmatik | |
a2 = aritmatik | |
print(a1.tambah(3) == a2.tambah(3)) #ini return true | |
print("aritmatik mempunyai initial 0 " | |
"Kemudian untuk menambahkan dengan dua " | |
"maka menggunakan aritmatik.tambah(2) ") | |
print() | |
print("{initial} + {tambahan} = {hasil}".format( | |
initial=aritmatik, | |
tambahan=2, | |
hasil=aritmatik.tambah(2))) | |
unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
perbedaan antara kode ini dengan kode diatas adalah mereturn copian dari dirinya sendiri, bukan return self. bisa dilihat perubahaannya di misalnya
dengan
adapun
self._copy()
isinya adalahreturn copy.deepcopy(self)
yakni salinannya dari dirinya sendiri