Bismillah…
Berikut saya tuliskan tutorial python OOP (Object-Oriented Programming) untuk pemula yang saya ambil dari youtube. Karena kebetulan penulis juga masih ‘buta’ tentang OOP 🙂
Mudah-mudahan bisa bermanfaat untuk penulis dan teman-teman pembaca sekalian.
Check this out!
- Pengenalan OOP
Menampilkan class sederhana bernama “Hero”. Perlu diperhatikan code pada contoh berikut masih kurang rapi, untuk code yang lebih rapi bisa cek tutorial selanjutnya (Contoh penggunaan __init() ).
Code :
class Hero: pass hero1 = Hero() # object / instance (instantiate) hero2 = Hero() hero3 = Hero() hero1.name = "sniper" hero1.health = 100 hero2.name = "sven" hero2.health = 200 hero3.name = "ucup" hero3.health = 1000 print(hero1) print(hero1.name) print(hero1.health) print(hero1.__dict__)
Output :
2. Contoh Penggunaan __init__()
Berikut merupakan contoh program sederhana untuk menggunaan __init() pada class “Hero”. Atribut yang terdapat pada class dapat dipanggil dengan syntax __dict__ .
Code :
class Hero: def __init__(self, inputName, inputHealth, inputPower, inputArmor): self.name = inputName self.health = inputHealth self.power = inputPower self.armor = inputArmor hero1 = Hero("sniper", 100, 10, 4) hero2 = Hero("mirana", 100, 15, 1) hero3 = Hero("ucup", 1000, 100, 0) # menampilkan 1 per 1 atribut dari class Hero print(hero1.name) print(hero1.health) print(hero1.armor) # menampilkan semua atribut sekaligus dari class Hero print(hero1.__dict__) print(hero2.__dict__) print(hero3.__dict__)
Output :
3. Contoh penggunaan Instance variables
Berikut merupakan contoh penggunaan Instance variable (variabel yang ada di dalam class). Catatan penting, ketika akan memanggil variabel ini di program utama, kita perlu menambahkan nama class di depannya, misal pada contoh di
bawah ini: “Hero.jumlah”
Hero : nama class
jumlah : nama instance variable-nya.
Code :
# instance variable: variabel yang ada di dalam class class Hero: # template #class variabel jumlah = 0 def __init__(self, inputName, inputHealth, inputPower, inputArmor): # instance variabel self.name = inputName self.health = inputHealth self.power = inputPower self.armor = inputArmor Hero.jumlah += 1 print("membuat Hero dengan nama " + inputName) hero1 = Hero("sniper", 100, 10, 4) print(Hero.jumlah) # kalo mau manggil class variable, depannya harus dikasih nama class-nya! hero2 = Hero("mirana", 100, 15, 1) print(Hero.jumlah) hero3 = Hero("ucup", 1000, 100, 0) print(Hero.jumlah)
Output :
4. Pengenalan methods
Berikut merupakan contoh sederhana penggunaan methods yang terdapat di dalam class. Catatan: nama class harus disebutkan terlebih dahulu sebelum memanggil methods. Untuk lebih jelasnya, perhatikan contoh di
bawah 🙂
Code :
class Hero: # class variable jumlah_hero = 0 def __init__(self, inputName, inputHealth, inputPower, inputArmor): # instance variable self.name = inputName self.health = inputHealth self.power = inputPower self.armor = inputArmor Hero.jumlah_hero += 1 # void function, method tanpa return, tanpa argumen def siapa(self): print("namaku adalah " + self.name) # method dengan argumen, tanpa return def healthUp(self, up): self.health += up # method dengan return def getHealth(self): return self.health hero1 = Hero('sniper', 100, 10, 5) hero2 = Hero('mario bros', 90, 5, 10) hero1.siapa() hero1.healthUp(10) print(hero1.getHealth())
Output :
5. Latihan OOP sederhana
Berikut merupakan contoh penggunaan OOP sederhana pada python, silahkan temen-temen pahami pelan-pelan, karena ini merupakan dasar yang penting 🙂
Code :
class Hero: def __init__(self,name,health,attackPower,armorNumber): self.name = name self.health = health self.attackPower = attackPower self.armorNumber = armorNumber def serang(self, lawan): print(self.name + ' menyerang ' + lawan.name) lawan.diserang(self, self.attackPower) def diserang(self, lawan, attackPower_lawan): print(self.name + ' diserang ' + lawan.name) attack_diterima = attackPower_lawan/self.armorNumber print('serangan terasa : ' + str(attack_diterima)) self.health -= attack_diterima print('darah ' + self.name + ' tersisa ' + str(self.health)) sniper = Hero('sniper',100,10,5) rikimaru = Hero('rikimaru',100,20,10) sniper.serang(rikimaru) print("\n") rikimaru.serang(sniper) print("\n") rikimaru.serang(sniper) print("\n") rikimaru.serang(sniper) print("\n") rikimaru.serang(sniper) print("\n") rikimaru.serang(sniper) print("\n")
Output :
6. Latihan OOP Tkinter sederhana
Pada code di bawah, kita dapat melihat penggunaan konsep OOP pada Tkinter.
Note: Class ditulis huruf besar, misal Tk(), Label(), Button().
Sedangkan method ditulis huruf
kecil, misal : pack(), mainloop().
Pastikan menggunakan python3 ketika akan running Tkinter!!
Code :
import tkinter main_window = tkinter.Tk() label1 = tkinter.Label(main_window, text = "label1") label2 = tkinter.Label(main_window, text = "label2") tombol1 = tkinter.Button(main_window, text = "tombol1") tombol2 = tkinter.Button(main_window, text = "tombol2") # method positioning label1.pack() label2.pack() tombol1.pack() tombol2.pack() # method menampilkan GUI main_window.mainloop()
Output :
7. Pengenalan Private Variable
Pada bagian ini, penulis sarankan untuk melihat video tutorial pada link
ini, agar lebih jelas dan paham. Yang penulis pahami, private variable penulisannya diawali tanda double underscore “__” (misal: __privateJumlah, self.__private). Sedangkan untuk protected variable diawali dengan single underscore “_” (misal: self._protected).
Code :
# variabel private : ada di dalam class,TAPI TIDAK BISA DIAKSES di program utama, misal: tinggi badan hero. # variabel public : ada di dalam class, dan BISA DIAKSES di program utama, misal: name dan health dari hero. class Hero: # class variabel jumlah = 0 __privateJumlah = 0 def __init__(self, name, health): self.name = name self.health = health # variabel instance private (penulisannya diawali dengan double underscore "__") self.__private = "private" # variabel instance protected self._protected = "protected" # variabel protected bukan variabel private! lina = Hero("lina",100) print(lina.__dict__) print(Hero.__dict__) print(Hero.__privateJumlah) # uncomment untuk melihat bahwa Hero.__privateJumlah termasuk variabel private!
Output :
8. Pengenalan Encapsulasi
Code :
class Hero: def __init__(self, name, health, attackPower): self.__name = name self.__health = health self.__attPower = attackPower # getter def getName(self): return self.__name def getHealth(self): return self.__health # setter def diserang(self, serangPower): self.__health -= serangPower def setAttPower(self, nilaibaru): self.__attPower = nilaibaru # awal dari game earthshaker = Hero("earthshaker", 50, 5) # game berjalan print(earthshaker.getName()) print(earthshaker.getHealth()) earthshaker.diserang(5) print(earthshaker.getHealth())
Output :
9. Pengenalan Staticmethod dan Classmethod
Code :
class Hero: # private class variable __jumlah = 0 def __init__(self,name): self.__name = name Hero.__jumlah += 1 # method ini hanya berlaku untuk objek def getJumlah(self): return Hero.__jumlah # method ini tidak berlaku untuk objek tapi berlaku untuk class def getJumlah2(): return Hero.__jumlah # method static (decorator) nempel ke objek dan class @staticmethod def getJumlah2(): return Hero.__jumlah @classmethod def getJumlah3(cls): return cls.__jumlah sniper = Hero('sniper') print(Hero.getJumlah2()) rikimaru = Hero('rikimaru') print(sniper.getJumlah2()) drowranger = Hero('drowranger') print(Hero.getJumlah3())
Output :
10. Pengenalan Getter dan Setter
Note: Harus python3!
Code :
class Hero: def __init__(self, name, health, armor): self.name = name self.__health = health self.__armor = armor #self.info = "name {} : \n\thealth: {}".format(self.name,self.__health) @property def info(self): return "name {} : \n\thealth: {}".format(self.name,self.__health) @property def armor(self): pass @armor.getter def armor(self): return self.__armor @armor.setter def armor(self, input): self.__armor = input @armor.deleter def armor(self): print('armor di delet') self.__armor = None sniper = Hero('sniper',100,10) print('merubah info') print(sniper.info) sniper.name = 'dadang' print(sniper.info) print('getter dan setter untuk __armor:') print(sniper.armor) sniper.armor = 50 print(sniper.armor) print('delete armor') del sniper.armor print(sniper.__dict__)
Output :
Update Penting: 14 november 2020 (penambahan code python2 untuk getter and setter!!)
Code :
# getter and setter # untuk python2 !! # source: //streetkoders.medium.com/property-python-sebuah-idiomatik-untuk-membuat-setter-dan-getter-d3a3a13be0b2 class Hero(object): def __init__(self, name,health,armor,*args, **kwargs): self.name = kwargs.get('name', name) self.__health = kwargs.get('health', health) self.__armor = kwargs.get('armor', armor) @property def info(self): return "name {} :\n\thealth: {}".format(self.name,self.__health) @property def armor(self): return self.__armor @armor.getter def armor(self): return self.__armor @armor.setter def armor(self, armor): self.__armor = armor @armor.deleter def armor(self): print('armor di delet') self.__armor = None sniper = Hero("sniper",100,10) print("merubah info") print(sniper.info) sniper.name = "dadang" print(sniper.info) print("getter and setter untuk __armor : ") print(sniper.armor) sniper.armor = 50 print(sniper.armor) print("delete armor") del sniper.armor print(sniper.__dict__)
Output :
11. Latihan Encapsulasi
Note : Harus python3 !!
Code :
# Latihan Encapsulasi # source: //www.youtube.com/watch?v=rakQ1ji9XRM&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=11 class Hero: # private class variabel __jumlah = 0 def __init__(self,name,health,attPower,armor): self.__name = name self.__healthStandar = health self.__attPowerStandar = attPower self.__armorStandar = armor self.__level = 1 self.__exp = 0 self.__healthMax = self.__healthStandar * self.__level self.__attPower = self.__attPowerStandar * self.__level self.__armor = self.__armorStandar * self.__level self.__health = self.__healthMax Hero.__jumlah += 1 @property def info(self): return "{} level {}: \n\thealth = {}/{} \n\tattack = {} \n\tarmor = {}".format( self.__name, self.__level, self.__health, self.__healthMax, self.__attPower, self.__armor) @property def gainExp(self): pass @gainExp.setter def gainExp(self,addExp): self.__exp += addExp if (self.__exp >= 100): print(self.__name, 'level up') self.__level += 1 self.__exp -= 100 self.__healthMax = self.__healthStandar * self.__level self.__attPower = self.__attPowerStandar * self.__level self.__armor = self.__armorStandar * self.__level def attack(self,musuh): self.gainExp = 50 slardar = Hero('slardar',100,5,10) axe = Hero('axe',100,5,10) print(slardar.info) slardar.attack(axe) slardar.attack(axe) slardar.attack(axe) print(slardar.gainExp)
Output :
Update Penting: 14 november 2020 (penambahan code python2 untuk latihan encapsulasi !!)
Code :
# Latihan Encapsulasi # untuk python2 !! # source: //www.youtube.com/watch?v=rakQ1ji9XRM&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=11 # //streetkoders.medium.com/property-python-sebuah-idiomatik-untuk-membuat-setter-dan-getter-d3a3a13be0b2 class Hero(object): # private class variabel __jumlah = 0 def __init__(self,name,health,attPower,armor,*args,**kwargs): self.__name = kwargs.get('name',name) self.__healthStandar = kwargs.get('health',health) self.__attPowerStandar = kwargs.get('attPower',attPower) self.__armorStandar = kwargs.get('armor',armor) self.__level = 1 self.__exp = 0 self.__healthMax = self.__healthStandar * self.__level self.__attPower = self.__attPowerStandar * self.__level self.__armor = self.__armorStandar * self.__level self.__health = self.__healthMax Hero.__jumlah += 1 @property def info(self): return "{} level {}: \n\thealth = {}/{} \n\tattack = {} \n\tarmor = {}".format( self.__name, self.__level, self.__health, self.__healthMax, self.__attPower, self.__armor ) @property def gainExp(self): pass @gainExp.setter def gainExp(self,addExp): self.__exp += addExp if (self.__exp >= 100): print(self.__name,'level up') self.__level += 1 self.__exp -= 100 self.__healthMax = self.__healthStandar * self.__level self.__attPower = self.__attPowerStandar * self.__level self.__armor = self.__armorStandar * self.__level def attack(self,musuh): self.gainExp = 50 print("\n{} menyerang {}".format( self.__name, musuh.__name )) slardar = Hero("slardar",100,5,10) axe = Hero("axe",100,5,10) print(slardar.info) slardar.attack(axe) print(slardar.info) slardar.attack(axe) print(slardar.info) slardar.attack(axe) print(slardar.info) slardar.attack(axe) print(slardar.info) print(slardar.gainExp)
Output :
12. Pengenalan Inheritance
Code :
class Hero: def __init__(self,name,health): self.name = name self.health = health class Hero_intelligent(Hero): pass class Hero_strength(Hero): pass lina = Hero('lina',100) techies = Hero_intelligent('techies',50) axe = Hero_strength('axe',200) print(lina.name) print(techies.name) print(axe.name)
Output :
13. Pengenalan Super
Note: Harus menggunakan python3 !!
Code :
# wajib pake python3 !! class Hero: def __init__(self,name,health): self.name = name self.health = health def showInfo(self): print("{} dengan health: {}".format(self.name,self.health)) class Hero_intelligent(Hero): def __init__(self,name): #Hero.__init__(self, name, 100) super().__init__(name, 100) super().showInfo() class Hero_strength(Hero): def __init__(self,name): super().__init__(name, 200) super().showInfo() lina = Hero_intelligent('lina') axe = Hero_strength('axe')
Output :
14. Pengenalan Override Method
Note: Harus menggunakan python3 !!
Code :
# wajib pake python3 !!! # source : //www.youtube.com/watch?v=sYKhxqcDu3w&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=14 class Hero: def __init__(self,name,health): self.name = name self.health = health def showInfo(self): print("showInfo di class Hero") print("{} health: {}".format( self.name, self.health ) ) class Hero_intelligent(Hero): def __init__(self,name): super().__init__(name,100) # override def showInfo(self): print("showInfo di subclass Hero_intelligent") print("{} \n\tTipe: intelligent, \n\thealth: {}".format( self.name, self.health ) ) class Hero_strength(Hero): def __init__(self,name): super().__init__(name,200) lina = Hero_intelligent('lina') axe = Hero_strength('axe') axe.showInfo()
Output :
15. Latihan Inheritance
Note : Wajib menggunakan python3 !
Code : Simpan dengan nama Hero.py !
# simpan dengan nama Hero.py # wajib menggunakan python3 ! # source : //www.youtube.com/watch?v=sSgKKLzxqS0&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=15 from Hero import HeroIntelligent,HeroStrength lina = HeroIntelligent('lina') slardar = HeroStrength('slardar') lina.show_info() slardar.show_info() lina.gainExp = 200 slardar.gainExp = 250 lina.show_info() slardar.show_info() class Hero: def __init__(self,name): self.health_pool = [0,100,200,300,400,500] self.attPower_pool = [0,10,20,30,40,50] self.armor_pool = [0,1,2,3,4,5] self.__name = name self.__exp = 0 self.__level = 0 def show_info(self): print("{} \n\tlevel: {}\n\thealth: {} \n\tattPower: {} \n\tarmor: {}".format( self.__name, self.__level, self.__health, self.__attPower, self.__armor ) ) @property def health_pool(self): pass @property def attPower_pool(self): pass @property def armor_pool(self): pass @property def levelUp(self): pass @property def gainExp(self): pass @health_pool.setter def health_pool(self,input): self.__health_pool = input @attPower_pool.setter def attPower_pool(self,input): self.__attPower_pool = input @armor_pool.setter def armor_pool(self,input): self.__armor_pool = input @gainExp.setter def gainExp(self,input): self.__exp += input if(self.__exp >= 100): self.levelUp = self.__exp//100 self.__exp %= 100 @levelUp.setter def levelUp(self,input): self.__level += input self.__health = self.__health_pool[self.__level] self.__attPower = self.__attPower_pool[self.__level] self.__armor = self.__armor_pool[self.__level] class HeroIntelligent(Hero): def __init__(self,name): super().__init__(name) self.health_pool = [0,50,100,150,200,250] self.attPower_pool = [0,20,40,60,80,100] self.armor_pool = [0,0.5,1,1.5,2,2.5] self.levelUp = 1 class HeroStrength(Hero): def __init__(self,name): super().__init__(name) self.health_pool = [0,200,300,400,500,600] self.attPower_pool = [0,20,40,60,80,100] self.armor_pool = [0,2,4,6,8,10] self.levelUp = 1
Main code :
# simpan dengan nama Hero.py # wajib menggunakan python3 ! # source : //www.youtube.com/watch?v=sSgKKLzxqS0&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=15 from Hero import HeroIntelligent,HeroStrength lina = HeroIntelligent('lina') slardar = HeroStrength('slardar') lina.show_info() slardar.show_info() lina.gainExp = 200 slardar.gainExp = 250 lina.show_info() slardar.show_info() from Hero import HeroIntelligent,HeroStrength lina = HeroIntelligent('lina') slardar = HeroStrength('slardar') lina.show_info() slardar.show_info() lina.gainExp = 200 slardar.gainExp = 250 lina.show_info() slardar.show_info()
Output :
16. Multiple Inheritance
Code : Contoh 1
# source : //www.youtube.com/watch?v=dhIAsMkQeGo&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=16 class A: def method_A(self): print("ini adalah method A") class B: def method_B(self): print("ini adalah method B") # multiple inheritance class C(A,B): pass objek = C() objek.method_A() objek.method_B()
Output :
Code : Contoh 2
# source : //www.youtube.com/watch?v=dhIAsMkQeGo&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=16 class Team: def setTeam(self,team): self.team = team def showTeam(self): print(self.team) class Tipe_Hero: def setTipe(self,tipe): self.tipe = tipe def showTipe(self): print(self.tipe) class Hero(Team,Tipe_Hero): def __init__(self,name,health): self.name = name self.health = health Ucup = Hero('Ucup',100) Ucup.setTeam("merah") Ucup.setTipe("cundang") Ucup.showTeam() Ucup.showTipe()
Output :
17. Method Resolution Order
Code :
# method resolution order // multiple inheritance # source : //www.youtube.com/watch?v=bn88uOxuUdc&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=17 class A: def show(self): print("ini adalah show A") class B: def show(self): print("ini adalah show B") # coba ini juga!: # class C(A,B), maka urutan eksekusinya C,A,B # class C(B,A), maka urutan eksekusinya C,B,A class C(B,A): pass objek = C() objek.show() # uncomment code di bawah, kemudian pencet 'q' setelah running program, untuk mengakhiri running program ! #help(objek)
Output : tanpa help(objek)
Output : dengan help(objek)
Referensi:
– //www.youtube.com/watch?v=1PjHsUnOkes
–
//www.youtube.com/watch?v=w9emRmkbeps
– //www.youtube.com/watch?v=upngNSC9FU8
– //www.youtube.com/watch?v=6F0T4IEzke4
–
//www.youtube.com/watch?v=k9ANKapvMKo
– //www.youtube.com/watch?v=6fIc2jV6HfY&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=7
–
//www.youtube.com/watch?v=NDjX-8kak2g&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=8
– //www.youtube.com/watch?v=ZPU1X5C0DaE&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=10