Properti

Pemrograman Berorientasi Objek di Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Mengubah nilai atribut

class Employee:
  def set_name(self, name):
    self.name = name 
  def set_salary(self, salary):
    self.salary = salary 
  def give_raise(self, amount):
    self.salary = self.salary + amount

def __init__(self, name, salary): self.name, self.salary = name, salary
emp = Employee("Miriam Azari", 35000)
# Gunakan sintaks titik dan = untuk mengubah atribut
emp.salary = emp.salary + 5000
Pemrograman Berorientasi Objek di Python

Mengubah nilai atribut

class Employee:
  def set_name(self, name):
    self.name = name 
  def set_salary(self, salary):
    self.salary = salary 
  def give_raise(self, amount):
    self.salary = self.salary + amount

def __init__(self, name, salary): self.name, self.salary = name, salary
emp = Employee("Miriam Azari", 35000)
# Gunakan sintaks titik dan = untuk mengubah atribut
emp.salary = emp.salary + 5000

 

 

Mengontrol akses atribut?

  • periksa nilai untuk validitas
  • atau buat atribut hanya-baca
    • memodifikasi set_salary() tidak akan mencegah emp.salary = -100
Pemrograman Berorientasi Objek di Python

Atribut terbatas dan hanya-baca

import pandas as pd
df = pd.DataFrame({"colA": [1,2], "colB":[3,4]})
df
  colA colB
0    1    3
1    2    4
df.columns = ["new_colA", "new_colB"]
df
  new_colA  new_colB
0    1    3
1    2    4
# akan menyebabkan kesalahan
df.columns = ["new_colA", "new_colB", "extra"]
df
ValueError: Panjang tidak sesuai: 
Sumbu yang diharapkan memiliki 2 elemen, 
nilai baru memiliki 3 elemen
df.shape = (43, 27)
df
AttributeError: tidak dapat mengatur atribut
Pemrograman Berorientasi Objek di Python

@property

class Employer:
  def __init__(self, name, new_salary):
     self._salary = new_salary


@property def salary(self): return self._salary
@salary.setter def salary(self, new_salary):
if new_salary < 0: raise ValueError("Gaji tidak valid") self._salary = new_salary

 

← Gunakan atribut "terlindungi" dengan awalan _ untuk menyimpan data

← Gunakan @property pada metode yang namanya persis sama dengan nama atribut terbatas; kembalikan atribut internal

← Gunakan @attr.setter pada metode attr() yang akan dipanggil pada obj.attr = value

  • nilai yang akan diberikan diteruskan sebagai argumen
Pemrograman Berorientasi Objek di Python

@property

class Employer:
  def __init__(self, name, new_salary):
     self._salary = new_salary


@property def salary(self): return self._salary
@salary.setter def salary(self, new_salary): if new_salary < 0: raise ValueError("Gaji tidak valid") self._salary = new_salary
emp = Employee("Miriam Azari", 35000)
# mengakses "properti"
emp.salary
35000
emp.salary = 60000 # <-- @salary.setter
emp.salary = -1000
ValueError: Gaji tidak valid
Pemrograman Berorientasi Objek di Python

Mengapa menggunakan @property?

  $$\text{\Large{User-facing: berperilaku seperti atribut}}$$

 

$$\text{\Large{Developer-facing: memberikan kontrol akses}}$$

Pemrograman Berorientasi Objek di Python

Kemungkinan lain

→ Jangan tambahkan @attr.setter

Buat properti hanya-baca

→ Tambahkan @attr.getter

Gunakan untuk metode yang dipanggil saat nilai properti diambil

→ Tambahkan @attr.deleter

Gunakan untuk metode yang dipanggil saat properti dihapus menggunakan del

Pemrograman Berorientasi Objek di Python

Mari berlatih!

Pemrograman Berorientasi Objek di Python

Preparing Video For Download...