Python OOP #2 – Sınıf Değişkenleri

apply_raise() adında yeni bir fonksiyon tanımlayalım. Bu fonksiyon işçilerin maaşlarını artıracak. Artırma miktarını raise_amount değişkeninde saklayacağım.

class Employee():

    number_of_emps = 0
    raise_amount = 1.04

    def __init__(self, fname, lname, pay):
        self.fname = fname
        self.lname = lname
        self.pay = pay
        self.mail = fname + "." + lname + "@company.com"

        Employee.number_of_emps += 1

    def fullname(self):
        return self.fname + " " + self.lname

    def apply_raise(self):
        self.pay = int(self.pay * self.raise_amount)

emp1 = Employee("Bob", "Hawkes", 5000)
emp2 = Employee("Alice", "Banas", 3500)

Eğer

print(emp1.pay)
emp1.apply_raise()
print(emp1.pay)

dersem çıktı 5000 ve 5200 şeklinde olacaktır. Burada tanımladığımız fonksiyon yardımıyla pay değişkenini değiştirdik. apply_raise() fonksiyonu tanımlamasını şu şekilde de yapabilirdik:

def apply_raise(self):
        self.pay = int(self.pay * Employee.raise_amount)

Burada raise_amount değişkenine erişmek için sınıf adını kullandık. Çünkü sınıf değişkenlerine sınıf veya nesne ile erişilebilir. Her iki kullanımda doğrudur.

Peki

Employee.raise_amount=1.05

print(emp1.raise_amount)
print(Employee.raise_amount)

yazdığımda çıktı ne olurdu? Burada açıkça görüldüğü gibi değişkeni sınıfla kullandığım zaman değişkenin yeni değeri o sınıftan türeyen tüm nesneleri etkileyecektir. Yani çıktı iki tane 1.05 olur. Ancak

emp1.raise_amount=1.05

print(emp1.raise_amount)
print(Employee.raise_amount)

yazdığımda bu çağırım sadece emp1 nesnesini etkileyecektir. Yani çıktı 1.05 ve 1.04 olur.

Sınıfımıza bir de number_of_emps değişkeni ekledim. Başlangıç fonksiyonunu her çağırdığımda bu değer bir artırılacak böylece toplam işçi sayısını saklamız olacağız. Bunu test etmek için şöyle bir kod parçacığı yazılabilir:

print(Employee.number_of_emps)

emp1 = Employee("Bob", "Hawkes", 5000)
emp2 = Employee("Alice", "Banas", 3500)

print(Employee.number_of_emps)

Çıktıda ne elde ettiniz?

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s