Jump to content

Python

  • entries
    66
  • comments
    0
  • views
    25,548

Non-Operator Overloads


Doğuhan ELMA

146 views

Non-Operator Overloads, Python'da özel metotlar veya "magic" metotlar olarak bilinen bir dizi metottur. Bu metotlar, belirli bir sınıfın örneklerinin belirli Python dil özelliklerine nasıl tepki vereceğini tanımlar. Bu metotlar, operatör overloading metotlarına benzer şekilde çalışır, ancak belirli operatörlerle değil, belirli Python dil özellikleriyle ilişkilidirler.

Örneğin, __len__ metodu bir sınıfın örneklerinin len() fonksiyonuna nasıl tepki vereceğini tanımlar:

class MyCollection:
    def __init__(self):
        self.items = []

    def add(self, item):
        self.items.append(item)

    def __len__(self):
        return len(self.items)

my_collection = MyCollection()
my_collection.add("item 1")
my_collection.add("item 2")
print(len(my_collection))  # 2

Bu örnekte, MyCollection sınıfının __len__ metodu, bir MyCollection örneğinin len() fonksiyonuna nasıl tepki vereceğini tanımlar. len(my_collection) ifadesini kullandığımızda, Python otomatik olarak my_collection.__len__() metotunu çağırır.

Benzer şekilde, __getitem__ ve __setitem__ metotları bir sınıfın örneklerinin köşeli parantez operatörüne ([]) nasıl tepki vereceğini tanımlar:

class MyArray:
    def __init__(self):
        self.items = []

    def __getitem__(self, index):
        return self.items[index]

    def __setitem__(self, index, value):
        self.items[index] = value

my_array = MyArray()
my_array.items = [1, 2, 3]
print(my_array[1])  # 2
my_array[1] = 5
print(my_array[1])  # 5

Bu örnekte, MyArray sınıfının __getitem__ ve __setitem__ metotları, bir MyArray örneğinin köşeli parantez operatörüne nasıl tepki vereceğini tanımlar.

Bu ve diğer non-operator overloads, bir sınıfın örneklerinin Python dil özelliklerine nasıl tepki vereceğini özelleştirmenizi sağlar, bu da sınıfın örneklerinin daha doğal ve sezgisel bir şekilde çalışmasını sağlar.

Python'da, Non-Operator Overloads olarak bilinen bir dizi özel metot veya "magic" metot bulunmaktadır. İşte bazıları:

__init__(self, ...): Bir sınıfın örneği oluşturulduğunda çağrılan constructor metodu.

__del__(self): Bir sınıfın örneği silindiğinde çağrılan destructor metodu.

__repr__(self): Bir sınıfın örneğinin resmi dize (string) temsilini sağlar.

__str__(self): Bir sınıfın örneğinin okunabilir dize temsilini sağlar.

__bytes__(self): Bir sınıfın örneğinin byte temsilini sağlar.

__format__(self, format_spec): Bir sınıfın örneğinin formatlı dize temsilini sağlar.

__hash__(self): Bir sınıfın örneğinin hash değerini sağlar.

__bool__(self): Bir sınıfın örneğinin boolean değerini sağlar.

__getattr__(self, name): Bir sınıfın örneğinin belirli bir özelliğine erişildiğinde çağrılır.

__setattr__(self, name, value): Bir sınıfın örneğinin belirli bir özelliğine değer atanırken çağrılır.

__delattr__(self, name): Bir sınıfın örneğinin belirli bir özelliği silindiğinde çağrılır.

__getattribute__(self, name): Bir sınıfın örneğinin belirli bir özelliğine erişildiğinde çağrılır.

__getitem__(self, key): Bir sınıfın örneğinin belirli bir indeks veya anahtara erişildiğinde çağrılır.

__setitem__(self, key, value): Bir sınıfın örneğinin belirli bir indeks veya anahtara değer atanırken çağrılır.

__delitem__(self, key): Bir sınıfın örneğinin belirli bir indeks veya anahtarı silindiğinde çağrılır.

__len__(self): Bir sınıfın örneğinin uzunluğunu sağlar.

__call__(self, ...): Bir sınıfın örneği çağrıldığında çağrılır.

__enter__(self), __exit__(self, exc_type, exc_value, traceback): Bir sınıfın örneği bir with ifadesi içinde kullanıldığında çağrılır.

__iter__(self): Bir sınıfın örneği üzerinde bir döngü başlatıldığında çağrılır. Bu metod, bir iterator döndürmelidir.

__next__(self): __iter__ metodunun döndürdüğü iterator üzerinde bir sonraki öğeyi almak için çağrılır.

__reversed__(self): Bir sınıfın örneği üzerinde ters bir döngü başlatıldığında çağrılır.

__contains__(self, item): Bir sınıfın örneğinde belirli bir öğenin olup olmadığını kontrol etmek için çağrılır.

__get__(self, instance, owner), __set__(self, instance, value), __delete__(self, instance): Bu metotlar, Python'da descriptor protokolünün bir parçasıdır ve bir sınıfın örneğinin özelliklerinin nasıl alınacağını, ayarlanacağını ve silineceğini tanımlar.

__new__(self): Bu metod, bir sınıfın örneğini oluşturmak için çağrılır. Genellikle __init__ metoduyla birlikte kullanılır.

__copy__(self), __deepcopy__(self, memodict={}): Bu metotlar, bir sınıfın örneğinin nasıl kopyalanacağını tanımlar.

__sizeof__(self): Bir sınıfın örneğinin bellekte ne kadar yer kapladığını döndürür.

Bu metotlar, bir sınıfın örneklerinin Python dil özelliklerine nasıl tepki vereceğini özelleştirmenizi sağlar. Bu, sınıfın örneklerinin daha doğal ve sezgisel bir şekilde çalışmasını sağlar.

 

1.jpg

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...