Python OOP'de name değişkenini self eklemeden döndürmüyor

deezwend

Decapat
Katılım
28 Haziran 2021
Mesajlar
275
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
Python:
class sth:
 name = "Hi"

 def __str__(self) -> str:
 return self.name # Eğer self eklemezsem döndürmüyor.

print(sth())

Merhaba. Yukarıda gördüğünüz kodlardaki gibi bir tane class oluşturdum ve self kullanmadan bir değişken atadım ona. Fakat şöyle bir şey yaşıyorum; eğer ben __str__ metotunda name değişkenini döndürmek istersem self eklemeden döndürmüyor, değişkeni tanımıyor. __str__ ile alakalı videolara baktım fakat tam olarak istediğimi bulamadım. Bunun neden böyle olduğunu bana detaylıca anlatabilir misiniz rica etsem? İyi günler.
 
Self eklemeniz gerekiyor çünkü name değişkeni return edilen fonksiyon altında değil direkt class altında tanımlanmış yani fonksiyon içerisinden erişilemez. Self de bulunduğumuz class olduğu için self.name yazınca class altındaki name değişkenine erişebiliyoruz.
 
Python:
class sth:
 name = "Hi"

 def __str__(self) -> str:
 return self.name # Eğer self eklemezsem döndürmüyor.

print(sth())

Merhaba. Yukarıda gördüğünüz kodlardaki gibi bir tane class oluşturdum ve self kullanmadan bir değişken atadım ona. Fakat şöyle bir şey yaşıyorum; eğer ben __str__ metotunda name değişkenini döndürmek istersem self eklemeden döndürmüyor, değişkeni tanımıyor. __str__ ile alakalı videolara baktım fakat tam olarak istediğimi bulamadım. Bunun neden böyle olduğunu bana detaylıca anlatabilir misiniz rica etsem? İyi günler.
"self" dediğimiz değer fonksiyonun bulunduğu classı temsil eder. Yani "self.name" değeri, fonksiyonun bulunduğu nesnenin içindeki "name" değerini temsil eder. Eğer bir nesne oluşturursanız, "self" değeri o nesneye eşit olur. Yani "self", fonksiyonun çalıştığı nesneyi temsil eder.

@oynozan @Iskenderun
 
"self" dediğimiz değer fonksiyonun bulunduğu classı temsil eder. Yani "self.name" değeri, fonksiyonun bulunduğu nesnenin içindeki "name" değerini temsil eder. Eğer bir nesne oluşturursanız, "self" değeri o nesneye eşit olur. Yani "self", fonksiyonun çalıştığı nesneyi temsil eder.

@oynozan @Iskenderun
Ben niye etiketlendim anlamadım ama haklısınız hocam. Birçok dilde class içi method ve değişkenlere erişmek için "kendine dönen" bir keyword kullanılır. Javascript'te this, Python'da self gibi gibi...
 
Python:
### class attributes
class Constructor:

    # class attributes
    address = 'none'
    birth = 'none'
    email = 'none'
    phone = 'none'

    # constructor
    def __init__(self, name, id):

        # object attributes
        self.name = name
        self.id = id

Bunun nedeni, name değişkenini class içerisinde class attribute olarak tanımlamış olmanız. Onu fonksiyon içerisine çağırmak için doğal olarak self parametresi üzerinden işlem yapmanız gerekir.

Aşağıdaki kodu kullanabilirsiniz:

Python:
class sth:

 def __str__(self) -> str:
   name = "Hi"
   return name

print(sth())

Örnekte name değişkenini fonksiyon içerisinde tanımladığınız için çağırmanız mümkün.
 
Ben niye etiketlendim anlamadım ama haklısınız hocam. Birçok dilde class içi method ve değişkenlere erişmek için "kendine dönen" bir keyword kullanılır. Javascript'te this, Python'da self gibi gibi...
Buradan:
1658157120348.png

İlgili konu:
 

Geri
Yukarı