Sunday 7 June 2015

25.Inheritance Dasar

Secara teknis, setiap class yang kita buat, menggunakan inheritance (mewarisi), semua class dan subclass merupakan objek. Pada class berisi data dan behavior, tapi tidak semua objek oleh python dipelukan sama.

Bila kita tidak mewarisi (inherit) dari class yang lain, class yang kita buat tetap mewarisi dari objek, walaupun demikian kita tetap bisa menggunakan objek (object) seperti syntax dibawah ini:


class subClassSatu(object):

     pass

secara teknik contoh diatas tidak berbeda dengan contoh-contoh sebelumnya. Pada python 3 semua class secara otomatis mewarisi dari objek, walaupun kita tidak memberikan superclass nya. 


Superclass adalah parent class, atau class yang ada diatasnya sebagai yang memberikan warisan. Sehingga contoh diatas (class subClassSatu) adalah subclass dari class object. 


Pada subClassSatu memiliki akses ke metode-metode yang ada pada superclass yaitu class object, semua yang ada pada class object dapat dipergunakan oleh subClassSatu, tetapi apa yang ada di class subClassSatu tidak dapat dipergunakan oleh class object.


Dengan adanya subclass, kita bisa menabahkan minimal satu syntax lagi yang tidak ada pada superclass, caranya seperti diatas yaitu :

     class namaClass (namaSuperClass):
          pass

Dengan demikian kita memberitahukan python bahwa class 'namaClass' merupakan turunan dari class 'namaSuperClass', sehingga 'namaClass' dapat mempergunakan semua objek yang ada pada 'namaSuperClass', dan ada penambahan objek yang lain, yang tidak ada pada 'namaSuperClass' yang ditambahkan.


Contoh dari inheritance:


  1. class kontak:
  2.      semuaKontak=[]

  3.      def __init__(self, nama1, noTlp1):
  4.           self.nama=nama1
  5.           self.noTlp=noTlp1
  6.           kontak.semuaKontak.append(self)

     
Class diatas merupakan pewaris dari class object, yang isinya hanyalah sebuah variable list baru 'semuaKontak'. Sehingga bila kita memanggil self.semuaKontak pada setiap objeknya maka akan menujukan ke satu variable yang sama. Dan fungsi def diatas hanyalah untuk menambahkan kontak-kontak yang baru ke variable list 'semuaKontak'.

Lalu kita buat subclass,



  1. class subClass(kontak):
  2.      def cetak(self, komen):
  3.         print('nama = {}, no telepon ={}, {}' .format (self.nama, self.noTlp, komen))





Pada contoh diatas kita lihat, objek c adalah class subClass yang merupakan subclass dari class kontak, sehingga objek c harus menginitial kan nama dan noTlp. 


objek a dan b merupakan superclass dari subClass, sehingga objek-objek tersebut tidak bisa mengakses fungsi cetak pada class subClass.


Dan objek c dapat mengakses variable list 'semuaKontak' yang berada di superclass kontak.


Kita coba:



  1. >>> c.semuaKontak
  2. [<__main__.kontak object at 0x0000000003545EB8>, <__main__.kontak object at 0x00000000035B0D68>, <__main__.subClass object at 0x00000000035B0DA0>]
  3. >>> a.cetak('hello')
  4. Traceback (most recent call last):
  5.   File "<pyshell#1>", line 1, in <module>
  6.     a.cetak('hello')
  7. AttributeError: 'kontak' object has no attribute 'cetak'
  8. >>> c.cetak('hello')
  9. nama = ccc, no telepon =555, hello
  10. >>> [d.nama for d in kontak.semuaKontak]
  11. ['aaa', 'bbb', 'ccc']
  12. >>> 


Pada baris pertama kita mencoba mengakses variable 'semuaKontak' dengan objek c, kita mendapakan alamat memorynya, objek c diizinkan mengakses variable 'semuaKontak' yang ada pada class kontak.

Pada baris ketiga. objek a yang merupakan class 'kontak' mencoba masuk kedalam class 'subClass' mendapatkan pesan error


Pada baris kedelapan, objek c mengakses class nya sendiri.


Pada baris kesepuluh kita mengakses semua nama yang ada di variable 'semuaKontak', class 'kontak'.



2 comments:

  1. izin copas artikel mas, mau di jadiin ebook buat pribadi. thank's.

    ReplyDelete