Skip to content

Str nesnesinin methodlar ve method operasyonlar method method wrapper

Method Operasyonları = Method Wrapper

String Nesnesinin Methodları ve Method Operasyonları

Str Nesnesinin Methodları Ve Method Operasyonları \( Method, Method-Wrapper \)

Giriş

Yukarıdaki resimde str tipinin aslında bir python nesnesi ve altında bir çok method \( nesneye ait fonksiyon\) ve method-wrapper olduğunu görebiliyoruz, sizlere bu yazımda anlatmak istediklerim resimde gördüğünüz herşeydir.

Bundan önceki yazılarımda python’a ve fonksiyonlara giriş yapmış, bir kaç fonksiyon kullanımını öğrenmiş, tipler konusuna değinmiş ve koşul durularını incelemiştik şimdi ise çok daha büyük ve güzel bir konuyu ele alacağız, eski içeriklerde python’da bulunan her şeyin bir nesne olduğunu ve str tipini öğrenmiştik şimdi gelin hep birlikte biraz derinlere dalalım.

Method Nedir?

Methodlar bir sınıf \( nesne, object \) altında bulunan fonksiyonlardır.

Method-wrapper Nedir

Kendileri yine bir method olup built-in \( yerleşik işlev \) objeleri için c katinda tanımlanmış ve belli operasyonların daha hızlı olmasını sağlayan methodlardır.

Burada anlatılacak olan wrapper’ler Python’da tanımlanmış her objede bulunur, bu yazımda str nesnesi üzerinden ilerlediğim için başlığı bu şekilde verdim ama yinede not düşmüş olayım.

Python c dili ile yazıldığından

Genellikle farkına varmadan kullanırız bu methodları örnek vermek gerekirse.

>>> "string" <= "string"
>>> "1" == "1"

Bu gibi işlemleri yapmamızı sağlarlar.

Method-Wrappers

Bu konu nesne yönetimli programlama (object oriented programming) başlığında önemli, bu wrapperleri bildiğimiz takdirde oluşturduğumuz yeni nesnemize göre değiştirebiliriz.

__ne__ Eşit Değildir Operasyon Methodu \( Not Equal to Operation Method\)

python konsolunu açın ve şunlardan birini yazın.

  • "".__ne__
  • str('').__ne__
  • "test".__ne__

<method-wrapper '__ne__' of str object at 0x0000024D27BB7C70> buna benzer bir çıktı göreceksiniz, burada str nesnesine ait olan __ne__ nin bir method-wrapper olduğunu görüyoruz.

Not: Daha önce açıklamadım galiba python’da nokta \(.\) işareti bir nesnenin methodlarını dolaşmamızı sağlar, örneğin hesap adında bir nesnem olsun ve isim adında bir methodum olsun hesap.isim yazdığımda çıktı olarak ‘hakan’ gibi bir şey verecektir, bu tam açıklayıcı değil ama şimdilik bu şekilde bilin.

peki bu method-wrapper’i nasıl kullanacağız ne işe yarar?

__ne__ Method-Wrapper ne İşe Yarar, Nasıl Kullanılır?

Onuda konsoldan bulalım, şöyle yazın, bu wrapper’in amacına bakıyorum.

  • ''.__ne__.__doc__ çıktım ‘Return self!=value.’ bu wrapper’in amacı nesne olan kendisi ile, parametre olarak verilen nesne değeri eşit değil ise True çıktısını veriyormuş.

Örnek yapalım.

>>> "".__ne__("") # Str nesnem ile verilen değer aynı bu yüzden False çıktısı vermesi gerek
>>> False
>>> "1".__ne__("") # Str nesnem ile değer 1 verilen ise boş karakter aynı değil True çıktısı verir
>>> True

Bu işlem başka nasıl yapılıyor ? işte aşağıdaki gibi.

In [1]: "" != ""
Out[1]: False

In [2]: "1" != ""
Out[2]: True

Gördüğünüz gibi bu öğrenme yolunu takip ederek başka ek bir kaynağa gerek duymadan diğer bütün method ve fonksiyonları inceleyeceğiz.

__mul__ Çarpma Operasyon Methodu \(Multiplication Operation Method\)

Yine konsolu açıp şöyle yazıp inceliyoruz str(1).__mull__.__doc__ çıktımız Return self*value., çıtkımızdan da anlaşılacağı üzere str nesnemizin değerini girilen değer ile çarpıyormuş deneyelim bakalım.

In [12]: str(1).__mul__(3)
Out[12]: '111'
In [13]: str("-").__mul__(13)
Out[13]: '-------------'

Peki bu işlemi başka nasıl yapıyoruz ? çok kolay

In [15]: "-" * 13
Out[15]: '-------------'

Python bu işlemi yukarıdaki gördüğünüz wrapper’i kullanarak yapıyor, yani isterseniz ’-‘ * 30 işleminin sonucunu değiştirebilirsiniz.

Python’da nesnelere az çok giriş yaptık fakat bir nesne nasıl yazılıri sınıf nedir konularına değinmedik ilerde bunlara değineceğim ama ondan önce sizlere yukarıdaki “-” * 30 işleminin sonucunu nasıl değiştirebildiğini kodlarda göstermek ve az da olsa sınıf’lara \( nesne kodlamasına veya object oriented programming - diğer adıyla nesne tabanlı programlamaya \) girmek istiyorum.

class TStr(str): # TStr isimli bir nesne, object oluşturdum, ve str nesnemi miras aldım
        # bu şu demek TStr isimli nesne içinde str nesnemin özelliklerine erişip kullanabilirim

 def __mul__(self, times): # nesne içine __mul__ adında bir fonksiyon tanımladım
                # bu fonksiyon TStr isimli nesnemin bir methodudur.
    return times # nesnem ile girilen değeri çarpmak yerine kişinin çarpmak istediği
                # sayısı döndürdüm.

test_str = TStr("bu bir test sınıfıdır") # yeni sınıfımı kullanarak bir str değeri oluşturdum ve test_str isimli değişkene attım

print(test_str * 3) #ve str nesnemi 3 kere çarpıyorum yani , değeri 3 defa yan yana toplaması lazım, ama ben __mul__ wrapperimi değiştirdim bu yüzden öyle olmayacak çıktı olarak 3 vermesi gerek

Çıktım; 3

gördüğünüz gibi istediğiniz şekilde değiştirebilirsiniz.

__lt__ Küçüktür Operasyon Methodu \(Less than Operation Method\)

Sıra __lt__ Method-Wrapper’ine geldi bakalım bu neler yapabiliyormuş ?

In [1]: "".__lt__.__doc__
Out[2]: 'Return self<value.'

Çıkan sonuca bakacak olursak eğer varsayılan __lt__ method’u bizlere bunun \(self<value\) bool değerini veriyor.

yani biz konsolda veya programımızda elimizde bulunan string veri türümüzdeki verimiz ile şöyle bir işlem yaparsak "123"<"234" ne sonuç verir, bu işlemin bool değeri nedir ? True‘dur işte __lt__ methodu varsayılan olarak bunu sağlar, istersek bu işlemi değiştirebilirsiniz.

In [1]: "".__lt__("123")
Out[2]: True
# buların ikisi aynı
In [1]: "" < "123"
Out[2]: True

In [3]: "123".__lt__("123")
Out[4]: False
In [1]: "" < "123"
Out[2]: True

In [5]: "12".__lt__("123")
Out[6]: True
In [1]: "" < "123"
Out[2]: True
__lt__ Methodumuzun İşlemini Değiştirelim

Şimdi kendi nesnemi yazacam ve bu nesnem str nesnesini miras alacak bu sayede str nesnesinin özelliklerine erişebileceğim hatta istersem değiştirebileceğim bile.

class MyStrClass(str): # MyStrClass isimli nesnemi yarattım ve str nesnemi miras aldım.

    def __lt__(self, text): # __lt__ methodunu değiştirmek için onu kendi nesnemde tekrar tanımladım ve text isimli 1 parametre verdim
        # bu sayede "" < "" işlemi yapıldığında str nesnesinin değil benim nesnemin __lt__ isimli methodu çalışacak
        return text # bu bölüm ise parametre olarak verilen veriyi tekrar döndürüyor.
        # yani "test"<"123" yapılırsa False yerine 123 çıktısı verecek

test edelim kendi str nesnemizi.

>>> my_str = MyStrClass("bu benim str nesnem")
>>> print(my_str < "test string")
>>> 'test string' # çıktı olarak aynısını aldım gördüğünüz gibi işlemi değiştirdik.
__len__ Uzunluk Bulma Operasyonu \(Length Finding Operation\)

__len__ wrapper’inin ne yaptığına bakalım.

>>> "".__len__.__doc__
'Return len(self).'

Çıktıdan anladığımıza göre verilen nesneyi parametre alarak len fonksiyonunu döndürüyor.

len fonksiyonu verilen str veya list veri tipinin eleman sayısını döndürür

Yani __len__ wrapper’i len() fonksiyonu ile aynı işi yapıyormuş.

>>> "33".__len__()
>>> 2
>>> [1, 2, 3].__len__()
3

Yukarıda 2 tane örnek verdim daha iyi anlaşılması açısından.

__le__ Küçük Eşittir Operasyonu \(less Equals Operation\)
Görevi
>>> "".__le__.__doc__
'Return self<=value.'

görevi "hakan"<="celik". bu işlem ile aynıdır, bu demek oluyor ki __le__ wrapperini değiştirerek python’da bulunan <= işleminin sonucunu değiştirebiliriz, ve sonuç bir bool dur yani True veya False‘dır.

Örnek
>>>  "test a".__le__("test a")
>>> True

>>> "test a e".__le__("test a")
>>> False
__eq__ Eşitlik Operasyonu \( Equality operation \)

String’imiz ile parametre olarak verilen veya == soldan sağa şeklinde ile kontrol edilerek çalışan bir operasyondur methodudur.

>>> "hakan".__eq__("hakan")
True
>>> "hakan celik".__eq__("hakan")
False
>>> "hakan" == "hakan"
True
__ge__ Büyük Eşittir Operasyonu \(Greater Equal Operation\)

"hakan">="celik". işleminin gerçekleşmesini sağlar, veya "hakan".__ge__("celik") şeklinde yazabiliriz.

__gt__ Büyüktür Operasyonu \(Greater Operation\)

"hakan">="celik". işleminin gerçekleşmesini sağlar, veya "hakan".__gt__("celik") şeklinde yazabiliriz.

__iter__ İteratör Operasyonu

String’i iteratör haline getirir.

>>> for i in "test".__iter__():
>>>     print(i)
>>> for i in "test":
>>>     print(i)

Bu iki örnek aynı işlemi yapar biz __iter__ methodunu fark etmeden kullanırız.

__init_subclass__ Methodu

Bu method-wrapper ilgili nesne miras alındığında çalışır, bu wrapperin yaptığı işi __new__ wrapperini kullanarakta yapılabilmektedir. Daha fazla bilgiye buradan ulaşabilirsiniz, PEP 487 – Simpler customisation of class creation

__new__ Methodu

Bu method ise nesneler çağrıldığında çalışan ilk method’dur. Diğer dillerde bulunan constructor, python’da __new__‘e denktir. Yapıcı fonksiyon olarakta geçer.

__init__ Methodu

Bu method ise nesne çalıştığında attributeler atamak için kullandığımız bir method’dur.

Methods

Swapcase Methodu

Kısaca söylemek gerekirse swapcase() fonksiyonu string’de bulunan büyük karekterleri küçük, küçük karakteri ise büyük yapar.

Convert uppercase characters to lowercase and lowercase characters to uppercase.

Kullanışı;
>>> "AbCd ".swapcase()
>>> "aBcD "
Partition Methodu

Bu method verilen parametre’yi kullanarak dizeyi 3 parçaya ayırır eğer verilen parametre dizede yok ise yine 3 parçaya böler ama 2 tane’si boş dize olarak belirlenir ve bir tuble olarak döner.

Partition the string into three parts using the given separator. This will search for the separator in the string. If the separator is found, returns a 3-tuple containing the part before the separator, the separator itself, and the part after it. If the separator is not found, returns a 3-tuple containing the original string and two empty strings.

Örnek;
>>> "1231 1".partition("2")
>>> ('1', '2', '31 1')
>>> "a".partition("a")
>>> ('', 'a', '')
>>> "aa".partition("a")
>>> ('', 'a', 'a')
>>> "aaa".partition("a")
>>> ('', 'a', 'aa')
>>> "aaab".partition("a")
>>> ('', 'a', 'aab')
>>> "abaab".partition("a")
>>> ('', 'a', 'baab')
Partition Methodunu Değiştirelim

Yine yukarıda diğer konularda yaptığımız gibi bir değişim yolu ile yapacağız, sadece yapılabildiği için yazıyorum sizlere belki farklı bir bakış açısı belki başka bir şey kazandırır diye.

class str(str): # str nesnemi miras aldım ve str adında yeni bir nesne oluşturdum

    def partition(self, p): # varsayılan str nesnemin partition methodun aldım
        return "lalal" # ve lalal diye bir string döndürdüm

print(str("sd").partition("a"))

Çıktımız ne olur sizce ? tabiki lalal olur. Gönül isterki python’da bulunan str nesnesini varsayılan olarak değiştirebilelim belkide bu mümkündür ama bilmiyorum.

Not

Vermek istediğim mesajları verdiğim için bu kısımları daha hızlı anlatıp geçmeyi planlıyorum hem tekrarar düşmemek hemde sizleri sıkmamak için.

Maketrans Methodu

Sadece 1 tane parametre alabilir ve türü dict olmalıdır, bu method translate methodu ile birlikte istenilen karakterleri değiştirmek için kullanılıyor.

>>> str().maketrans(dict(a=1))
{97: 1}

Yukarıdaki örnek bizlere bir dict döndürdüğünü görüyoruz a değerinin acsii karşılığı key olarak verilmiş value olarak ise a değişkenine atadığımız değeri döndürüyor.

Translate Methodu

Translate methodu translation çeviri tablosunu kullanarak verilen string‘in her bir karakterini değiştirir. Çeviri tablosu dict türünden bir veri olmalıdır zaten bu kısmı bir üst kısımda anlattığım method yardımı ile oluşturabiliyoruz bizim teker teker girmemize gerek kalmıyor.

>>> "b".translate(str().maketrans(dict(b="r")))
'r'
`

Burda dict(b="r") bu kısım sayesinde b karakteni r yapabiliyoruz

>>> "b".translate("".maketrans(dict(c="r")))
'b'
`

Bu kısımda c karakteri olmadığı için replace işlemi yapamıyoruz

>>> "bcca".translate(str().maketrans(dict(c="r")))
'brra'
`

Burda c olan her bir karakter r oluyor

Ljust Methodu

Tek parametreli bir method olup integer türünden bir değier alır ve aldığı değer kadar soldan boşluk ekler.

>>> "Hakan".ljust(11)
"Hakan           "
Join Methodu

Join methodu gerçekten sık kullanılan ve kullanışlı bir method’dur, tek parametre alır list veya tuble türünde olmalıdır. Parametre olarak aldığı her bir liste elemanının bulunduğu string‘e ekler.

Liste elemanları string olmalıdır.

>>> str().join(["-","ş", "2", " ", "/"])
'-ş2 /'
>>> "/".join(["path", "to"])
'path/to'
Istitle Methodu

Bu method string nesnesinin Başlık \( Title \) formatında yazılıp yazılmadığını kontrol eder eğer doğru ise True sonucunu döndürür, başlık formatından kastımız ise bildiğimiz yazım kurallarını kapsar örnek olarak.

  • Bu Bir Başlıktır
  • Başlık

Baş harfleri büyük,

>>> "Bu Bir Başlıktır".istitle()
True
>>> "Bu Bir başlıktır".istitle()
False
Isspace Methodu

Eğer string’imiz sadece whitespace yani boşluk karakterleri ise True döndürür aksi halde False döndürür.

>>> str().isspace()
False
>>> str("  ").isspace()
True
>>> str("  t").isspace()
False
Islower Methodu

Eğer string’imiz sadece küçük karakterlerden oluşuyor ise True döndürür aksi halde False döndürür.

>>> "Ab".islower()
False
>>> "ab".islower()
True
Isdecimal Methodu

Eğer string’imiz sadece sayıya dönüşebilen karakterlerden oluşuyorsa True döndürür aksi halde False döndürür.

>>> "1".isdecimal()
True
>>> "a 1".isdecimal()
False
>>> "1 2".isdecimal() # boşluk var
False
>>> "1234".isdecimal()
True
Isascii Methodu

Eğer string’imiz sadece ascii karakterlerden oluşuyorsa True döndürür aksi halde False döndürür.

>>> "asd".isascii()
True
>>> "asdı".isascii() # ı harfi ascii değildir
False
Isalpha Methodu

Eğer string’imiz sadece karakterlerden oluşuyorsa True döndürür aksi halde False döndürür.

>>> "123 a".isalpha()
False
>>> "123".isalpha()
False
>>> "asd".isalpha()
True
Isalnum Methodu

Eğer string’imiz sadece karakterlerden veya sayılardan oluşuyorsa True döndürür aksi halde False döndürür.

>>> "test a".isalnum() # boşluk var o yüzden False
False
>>> "12".isalnum()
False
>>> "12s".isalnum()
True
Index Methodu

Parametre olarak verilen str türündeki verimizi string’imizde eşleştiği ilk konumu verir.

# test a
# 012345 indexler
>>> "test a".index("a")
5
>>> "test ava".index("a") # yine ilk konumu verecek
5
Expandtabs Methodu

String’imizde tab kaçış işareti bulduğunda onu boşluklar yardımı ile genişletir, tek parametre alır ve bu varsayılan olarak 8 dir.

Tab kaçıi işarati \t dir.

>>> "test \t".expandtabs()
'test    ' # 8 boşluk vardır
>>> "test \t\t".expandtabs() # iki tab kaçış işareti olduğu için
'test         ' # 16 boşluk var
>>> "test\t\t".expandtabs(0) # parametreye 0 yazdığım için 8 yerine 0 boşluk koyacak
'test' # hiç boşluk yok
Count Methodu

Tek parametre alır ve aldığı str türündeki parametrenin verilen string’imizde kaç defa geçtiğini döndürür.

>>> "I love you 3000".count("0")
3
>>> "I am iron man".count("a")
2
Center Methodu

String’imizin parametre olarak girilen sayı uzunluğunda olmasını sağlar ve string’i ortalar, eğer parametre’ye yazılan sayı string’in uzunluğundan az ise değişmez.

>>> "I do not feel good".center(3)
'I do not feel good'
>>> "I do not feel good".center(30)
'      I do not feel good      '

Last update: June 15, 2022
Created: June 15, 2022