Data Instance dan Kelas

Pemrograman Berorientasi Objek di Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Prinsip Inti OOP

 

Pewarisan:

  • Memperluas fungsionalitas kode yang ada

Polimorfisme:

  • Menciptakan antarmuka yang seragam

Enkapsulasi:

  • Menggabungkan data dan metode
Pemrograman Berorientasi Objek di Python

Data Tingkat Instance

class Employee:
    def __init__(self, name, salary):
       self.name = name
       self.salary = salary

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • name, salary adalah atribut instance
  • self mengikat ke instance
Pemrograman Berorientasi Objek di Python

Data Tingkat Kelas

  • Data dibagikan di antara semua instance dari kelas
  • Mendefinisikan atribut kelas dalam tubuh class
class MyClass:
    # Mendefinisikan atribut kelas
    CLASS_ATTR_NAME = attr_value


  • "Variabel global" dalam kelas
Pemrograman Berorientasi Objek di Python

Data Tingkat Kelas

class Employee:
  # Mendefinisikan atribut kelas
  MIN_SALARY = 30000    #<--- tidak ada self. 

def __init__(self, name, salary): self.name = name # Gunakan nama kelas untuk mengakses atribut kelas if salary >= Employee.MIN_SALARY: self.salary = salary else: self.salary = Employee.MIN_SALARY
  • MIN_SALARY dibagikan di antara semua instance
  • Jangan gunakan self untuk mendefinisikan atribut kelas
  • gunakan ClassName.ATTR_NAME untuk mengakses nilai atribut kelas
Pemrograman Berorientasi Objek di Python

Data Tingkat Kelas

class Employee:
  # Mendefinisikan atribut kelas
  MIN_SALARY = 30000    

def __init__(self, name, salary): self.name = name # Gunakan nama kelas untuk mengakses atribut kelas if salary >= Employee.MIN_SALARY: self.salary = salary else: self.salary = Employee.MIN_SALARY
emp1 = Employee("TBD", 40000)
print(emp1.MIN_SALARY)
30000
emp2 = Employee("TBD", 60000)
print(emp2.MIN_SALARY)
30000
Pemrograman Berorientasi Objek di Python

Mengapa menggunakan atribut kelas?

Konstanta global terkait kelas

 

  • nilai minimal/maksimal untuk atribut
  • nilai dan konstanta yang sering digunakan, misalnya pi untuk kelas Circle
  • ...
Pemrograman Berorientasi Objek di Python

Metode Kelas

  • Metode sudah "dibagikan": kode yang sama untuk setiap instance
  • Metode kelas tidak dapat menggunakan data tingkat instance
class MyClass:

  @classmethod                         # <---gunakan dekorator untuk mendeklarasikan metode kelas

def my_awesome_method(cls, args...): # <---argumen cls merujuk ke kelas # Lakukan sesuatu di sini # Tidak dapat menggunakan atribut instance :(
MyClass.my_awesome_method(args...)
Pemrograman Berorientasi Objek di Python

Konstruktor Alternatif

class Employee:
  MIN_SALARY = 30000
  def __init__(self, name, salary=30000):
      self.name = name
      if salary >= Employee.MIN_SALARY:
        self.salary = salary
      else:
        self.salary = Employee.MIN_SALARY
  • Hanya dapat memiliki satu __init__()

  @classmethod
  def from_file(cls, filename):
      with open(filename, "r") as f:
          name = f.readline()
      return cls(name)

  • Gunakan metode kelas untuk membuat objek
  • Gunakan return untuk mengembalikan objek
  • cls(...) akan memanggil __init__(...)
Pemrograman Berorientasi Objek di Python

Konstruktor Alternatif

class Employee:
  MIN_SALARY = 30000
  def __init__(self, name, salary=30000):
      self.name = name
      if salary >= Employee.MIN_SALARY:
        self.salary = salary
      else:
        self.salary = Employee.MIN_SALARY

  @classmethod
  def from_file(cls, filename):
      with open(filename, "r") as f:
          name = f.readline()
      return cls(name)        

file teks berisi satu baris dengan nama karyawan

# Membuat karyawan tanpa memanggil Employee()
emp = Employee.from_file("employee_data.txt")
type(emp)
__main__.Employee
Pemrograman Berorientasi Objek di Python

Mari Berlatih!

Pemrograman Berorientasi Objek di Python

Preparing Video For Download...