· Hakan Çelik · Python · 10 dk okuma
String Nesnesinin Methodları ve Method Operasyonları

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
>>> TrueBu 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]: TrueGö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ı verecektest 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__()
3Yukarı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()
FalseIsspace 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()
FalseIslower 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()
TrueIsdecimal 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()
TrueIsascii 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
FalseIsalpha 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()
TrueIsalnum 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()
TrueIndex 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
5Expandtabs 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
\tdir.
>>> "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 yokCount 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")
2Center 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 '
Hakan Çelik

