Sınıflarla ilgili birkaç kavramdan bahsedeyim.
-Sınıf Değişkeni: Bir sınıfın tüm örnekleri tarafından paylaşılan değişkendir. Sınıf değişkenleri sınıf içinde tanımlanır fakat dışında sınıf metodudur.
-Fonksiyonu Aşırı Yükleme: Belirli bir işleve birden fazla davranış atamak.
-Operatör aşırı yükleme: Belirli bir operatör için birden fazla fonksiyon atamak.
-Miras Alma: Bir sınıftan türetilen diğer sınıflar için, o sınıfın özelliklerinin devri anlamındadır.
Sınıf Oluşturma:
"class className: " şeklinde oluşturulur. Aşağıdaki kod parçasını deneme.py dosyasına yazalım.
class Employee:
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ",Salary: ", self.salary
nesnelerini oluştururken Python'u çalıştırıp önce "from deneme import Employee" diyerek sınıftaki özellikleri kullanılabilir hale getiriyoruz.
emp1 = Employee("aybuke", "5000")
diyerek de nesnemizi oluşturabiliriz.
Bazı niteliklere erişmek için de aşağıdaki fonksiyonlar kulanılanılabilir:
- getattr(obj, name, [default]): nesne niteliğine erişmek için.
-hasattr(obj, name): niteliğin olup olmadığını kontrol etmek için.
-setattr(obj, name, value): nitelik ayarlamak için. Yoksa niteliği oluşturacaktır.
-delattr(obj, name): niteliği silmek için.
Dahili Sınıf Özellikleri:
Nokta operatörü ile sınıf özelliklerine rahatça erişilir.
__dict__ : İsimuzaylarının bulunduğu sözlük.
__doc__: sınıf belgeleri tanımlandıysa buradadır.
__name__: sınıf adını bulundurur.
__module__: sınıfın tanımladığı modül adı. Etkileşimli modda __main__'dir.
__bases__: Temel sınıf listesinde oluşma sırasına göre temel sınıfları barındıran, bir olasılıkla boş taban sınıfları.
Miras Alma:
önce miras alınacak sınıfımızı oluşturalım.
class Animal(object):
'''
Our animal object
'''
def __init__(self,name,animalType):
print "I am a ",animalType
def makeNoise(self,noise):
print noise
def sleep(self):
print "zzzz"
def eat(self,food):
print "Eating ",food
daha sonra alt sınıfımızı yazalım.
class Tiger(Animal):
super(Tiger, self).__init__(name, Tiger)
self.makenoise('roar')
def stalk(self):
print 'talking an antelope'
self.eat('anthelope meat')
yukarıda kullandığımız "super" methodunun işlevi de şu aslında:
class A(object):
def __init__(self):
print ('running A .__init__')
class B(A):
def __init__(self):
print('running B.__init__')
A.__init__(self)
#super(B,self).__init__()
Super methodunu tam olarak açıklar mısınız
YanıtlaSilAlt-sınıf, üst-sınıfına erişmek isterse bu methodu kullanabiliyoruz. Nesne yaratırken, bir de üst-sınıfın öğelerine erişirken işe yarıyor. Mesela yukarda A sınıfı B'nin üst sınıfı. B sınıfı, A'nın methoduna erişip kullanabilmiş, "super(B,self).__init__()" bu şekilde. Ben B sınıfınd uzun halini yazıp methodu kullandığım satırı yorum satırı şeklinde yazmışım. Karışıklık yaratmış da olabilir. Kısaca A sınıfındaki methodu yeniden B sınıfına yazmaktansa A'dakine erişip kullanabiliriz.
YanıtlaSil