2.20. Birinci sınıf¶
Sınıf, verileri ve bu veriler üzerinde işlem yapan fonksiyonları tek bir ad altında gruplar. Birkaç durum parçası bir araya geldiğinde ve bir betikteki fonksiyonların çoğu aynı değer kümesini argüman olarak aldığında bir tane kullanmaya değer.
2.20.1. class anahtar sözcüğü¶
Anahtar sözcük class‘tır. Gövde, her yeni örnek oluşturulduğunda çalışan bir __init__ yöntemi içerir:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(3, 4)
print(p.x, p.y)
Çıktı:
3 4
Point sınıftır; p ise onun bir örneğidir. Point(3, 4) çağrısındaki parantezler, argümanları yeni örnekteki niteliklere atayan __init__ yöntemini çağırır. self, örnek için kullanılan geleneksel addır; self.x, örneğin diğer yöntemlerinin okuyacağı bir niteliği ayarlar.
2.20.2. Ne zaman sınıf kullanmalı¶
Şunlar aynı anda doğru olduğunda bir sınıf kullanın:
Bir avuç ilgili değer her yerde birlikte hareket eder (bir noktanın
xveydeğerleri; bir sensör okumasının değeri, birimi ve zaman damgası).Birkaç fonksiyon aynı değer kümesini alır ve bunlar üzerinde işlem yapar.
Bu paketlerden birden fazlasını, birbirinden farklı olarak aynı anda canlı tutmak yararlıdır.
Veri tek seferlikse, düz bir dict veya tuple genellikle yeterlidir. Yalnızca tek bir sabitler paketine ihtiyacınız varsa, modül düzeyinde değişkenler uygundur. Sınıflar varsayılan kapsayıcı değildir – durum ve davranış bir arada kalmak istediğinde yerlerini hak ederler.
2.20.3. __init__ ne yapar¶
__init__ sadece normal bir yöntemdir. İçinde self‘e atanan her şey yeni örnekte bir nitelik olur:
class Sensor:
def __init__(self, name, unit):
self.name = name
self.unit = unit
self.readings = []
temp = Sensor("temperature", "C")
print(temp.name, temp.unit, temp.readings)
Çıktı:
temperature C []
readings boş bir listeye ilklenir – her yeni örnek paylaşılan değil, kendi listesini alır. self‘e atanmayan her şey __init__‘e yereldir ve geri döndüğünde kaybolur.