Bismillah… Show Berikut saya tuliskan tutorial python OOP (Object-Oriented Programming) untuk pemula yang saya ambil dari youtube. Karena kebetulan penulis juga masih ‘buta’ tentang OOP 🙂
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 : Gambar 1. Tampilan output program di terminal ubuntu
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 : Gambar 2. Penggunaan __init__()
# 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 : Gambar 3. Penggunaan instance variabel yang terdapat di dalam class4. Pengenalan methods 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 : Gambar 4. Contoh penggunaan methods yang ada di dalam class.
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 : Gambar 5. Latihan membuat game sederhana dengan OOP di python.
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 : Gambar 6. Contoh penggunaan konsep OOP pada Tkinter.7. Pengenalan Private Variable # 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 : Gambar 7. contoh penulisan private variable
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 : Gambar 8. Encapsulasi
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 : Gambar 9. Static method dan Class method
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 : Gambar 10. Getter dan SetterUpdate Penting: 14 november 2020 (penambahan code python2 untuk getter and setter!!) # getter and setter # untuk python2 !! # source: https://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 Code : # Latihan Encapsulasi # source: https://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 : Gambar 12. Output program Latihan encapsulasiUpdate Penting: 14 november 2020 (penambahan code python2 untuk latihan encapsulasi !!) # Latihan Encapsulasi # untuk python2 !! # source: https://www.youtube.com/watch?v=rakQ1ji9XRM&list=PLZS-MHyEIRo7ab0-EveSvf4CLdyOECMm0&index=11 # https://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 :
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 : Gambar 15. Output Program Pengenalan Inheritance
# 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 :
# wajib pake python3 !!! # source : https://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 :
# simpan dengan nama Hero.py # wajib menggunakan python3 ! # source : https://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 : https://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 :
# source : https://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 : https://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 :
# method resolution order // multiple inheritance # source : https://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) Gambar 17. Tanpa help(objek)Output : dengan help(objek) Gambar 18. Dengan help(objek), pencet ‘q’ untuk mengakhiri running program. Dapat melihat urutan eksekusi class (C, B, A)Referensi: Apakah python mendukung OOP?Bahasa Pemrograman Python merupakan bahasa yang mendukung 100% Object Oriented Programming (OOP).
Apa itu OOP pada python?Object Oriented Programming (OOP) adalah suatu paradigma pemrograman yang berorientasi pada konsep class (kelas) dan object (objek). Konsep ini sering kali digunakan dalam menyusun aplikasi menjadi kode yang sederhana dan dapat digunakan kembali (reuseable).
Apa saja konsep OOP?4 Prinsip OOP. Encapsulation. Prinsip enkapsulasi atau kapsulisasi dalam OOP dilakukan ketika setiap objek dalam pemrograman dapat mempertahankan keadaan privat di dalam sebuah kelas-kelas cetak biru. ... . 2. Abstraction. Abstraction atau abstraksi merupakan perpanjangan tangan enkapsulasi. ... . 3. Inheritance. ... . Polymorphism.. Apa itu atribut di python?Atribut adalah data anggota (variabel kelas dan variabel contoh) dan metode, diakses melalui notasi titik. Sebuah variabel yang dibagi oleh semua contoh kelas. Variabel kelas didefinisikan dalam kelas tapi di luar metode kelas manapun.
|