Python öz

Python işlevleri ve meth

“self” değeri yalnızca bir işlev çağrıldığında ve belirtildiğinde bir yöntemin içinde kullanılabilir.

“self” bir yönteme belirtilen argümanlarda veya “self” bir argüman olarak. Aksi takdirde, “NameError: name ‘self’ hatasını görürsünüz. tanımlı değil”.

Bu kılavuzda, bu hatanın ne anlama geldiği ve neden ortaya çıktığı hakkında konuşuyoruz. Kodunuzdaki bu hatayı nasıl çözeceğinizi anlamanıza yardımcı olmak için birkaç kod parçacığı üzerinden geçiyoruz.




Ad Hatası: ad ‘self’ tanımlı değil

“self” değişken, bir sınıf içindeki bir nesne hakkındaki bilgileri tutar. Bir nesneye atanan tüm değerler “self” değişken.

“self” bir yöntemde kullanmak istiyorsanız, argüman olarak iletilmelidir. “öz” değişken, yalnızca bir yöntemin içinden erişilebilir olduğundan, bir yöntemdeki diğer bağımsız değişkenlerde kullanılamaz.

“Ad Hatası: ad ‘self’ tanımlı değil” hata veriyorsanız:

  • “self” argüman olarak
  • “self” başka bir argümanda argüman olarak

Bu senaryoların her birini tek tek inceleyelim.




Senaryo 1: “self” Bir Argüman Olarak Listelenmemiş

“self” bir yöntemde erişilebilir olması için bir argüman olarak listelenmelidir. “kendine” global bir değişken değildir. Bir sınıfın içinde yereldir.

Katılımcıların %81'i, bir eğitim kampına katıldıktan sonra teknik iş beklentileri konusunda daha emin hissettiklerini belirtti. Bugün bir eğitim kampı ile eşleştirin.

Ortalama bir eğitim kampı mezunu, bir eğitim kampına başlamaktan ilk işini bulmaya kadar, kariyer geçişinde altı aydan az zaman harcadı.

Bilgileri tutan bir program yazın. bir sınıftaki filmler hakkında. Filmimizle ilgili değerleri tutan bir kurucu ile sınıfımızı tanımlayarak başlıyoruz:

class Film: def __init__(self, name, year_released): self.name = name self.year_released = year_released

Sınıfımız iki değeri tutabilir: bir filmin adı ve filmin olduğu yıl yayınlandı. Ardından, “year_released”:

 def değerini değiştirmemize izin veren bir yöntem ilan ediyoruz. change_year(year_released): self.year_released = year_released print("{} {}.".format(self.name, self.year_released))

Kodumuzu test etmek için, sınıfımızın bir nesnesini yaratıyoruz. Bu nesne, 1996'da yayınlanan Happy Gilmore filmini temsil ediyor:

happy_gilmore = Movie("Happy Gilmore ") happy_gilmore.change_year(1996)

nesnemiz< üzerinde change_year() yöntemini çağırdık /a> böylece filmin vizyona girdiği yılı 1996 olarak ayarlayalım. Kodumuzu çalıştıralım ve çalışıp çalışmadığını görelim:

Geri izleme (en son yapılan arama): Dosya "main.py", satır 11,  happy_gilmore.change_year() Dosya "main.py", satır 7, change_year'da self.year_released = year_released NameError: "self" adı tanımlı değil

Kodumuz bir hata döndürüyor.

Bu hata, yöntemimize argüman olarak “self” geçmediğimiz için ortaya çıktı.Bu hatayı, ilk argüman olarak “self” ekleyerek düzeltiyoruz. change_year() yöntemi:

def change_year(self, year_released): self. year_released = year_released print("{} {}.".format(self.name, self.year_released))

Kodumuzu yeniden çalıştırın:

Kodumuz başarılı bir şekilde çalışıyor!




Senaryo 2: Başka Bir Argümanda “self”ı Argüman Olarak Kullanmak

“self” bir fonksiyon çağrıldığında değerlendirilir. bir işlev çağrısında belirtilen bağımsız değişkenler listesinde “self” öğesine başvuran bir bağımsız değişkene sahip olamaz.

“year_released” yöntemimizi güncelleyin d böylece, farklı bir yayın yılı belirtilmemişse, konsola bir filmin yılının değişmediğini söyleyen bir mesaj yazdırılır.

Bunu ayarlayarak yapabiliriz. kodumuzda varsayılan bir argüman:

def change_year(self, year_released=self.year_released): if year_released ! = self.year_released: self.year_released = year_released print("{} {}.".format(self.name, self.year_released))'de yayınlandı else: print("Bu film değiştirilmedi.") print( year_released)

“year_released” artık “self.year_released” varsayılan değerine sahiptir. Bu, yılın değiştirilmesi gereken bir değer belirtmezsek, varsayılan bir değerin ayarlandığı anlamına gelir. Bir değer belirtirsek, varsayılan yerine belirttiğimiz değer kullanılır.

Belirttiğimiz değer “self.year_released” değerine eşit değilse, değeri “self.year_released” değişti. Aksi takdirde, konsola filmin değiştirilmediğini bildiren bir mesaj yazdırılır.

if ifademiz değerlendirildikten sonra, “ year_released” konsola yazdırılır.

Kodumuzu çalıştıralım:

Geri izleme (en son yapılan arama): Dosya "main.py", satır 1,  class Film: Dosya "main.py", 6. satır, Filmde def change_year(self, year_released=self.year_released): NameError: 'self' adı tanımlı değil

Kodumuz yükseltilir bir hata. Bunun nedeni, “self” argüman listemizdeki başka bir argümanda.


Bu hatayı “year_released” değişkenin değerini fonksiyonumuzun içinde “self.year_released” olarak ayarlayarak düzeltebiliriz. argüman listemiz yerine:

def change_year(self, year_released=Yok): if year_released != self.year_released: self.year_released = year_released print("{} {}.".format(self.name, self.year_released)) başka: year_released = self.year_released print("Bu film değiştirilmedi. ") print(year_released)

Bu kodda, “year_released” için “year_released” için bir değer belirtmezsek “self.year_released” değerine eşit olacak şekilde ayarladık. işlev çağrımız.

"Python.Engineeringsı hayatıma en çok ihtiyacım olduğu anda girdi ve hızlı bir şekilde bana yardımcı oldu. bir bootcamp ile tch. Mezun olduktan iki ay sonra, hayattaki değerlerim ve hedeflerime uygun hayalimdeki işi buldum!"

Venus, Rockbot'ta Yazılım Mühendisi

< p>Kodumuzu test etmek için yeni bir Movie nesnesi oluşturalım:

happy_gilmore = Movie("Happy Gilmore", 1995) happy_gilmore.change_year(1996)

Happy Gilmore'un yayınlandığı yılı yanlış olarak 1995 olarak belirledik. Bunu change_year() yöntemi. Kodumuz şunu döndürür:

Happy Gilmore 1996'da yayınlandı. 1996

Kodumuz başarıyla yürütüldü. “year_released” değerinin zaten change_year() yöntemi:

happy_gilmore = Film ("Happy Gilmore", 1996) happy_gilmore.change_year(1996)

Kodumuz şunu döndürür:

Bu film değiştirilmedi. 1996

Kodumuz, kodumuzdaki else ifadesini çalıştırır ve ardından bize filmin değiştirilmediğini söyler.




Sonuç

h2>

“AdHatası: ad ‘self’ tanımlı değil” “self” konumsal bir argüman olarak veya “self” bir argüman listesindeki başka bir argümanda.

Bu hatayı, “self” “kendini” onların argüman listesinde. Bu işe yaramazsa, argümanlar listesindeki hiçbir argümanın “self” varsayılan değerleri için.

Artık bu Python hatasını profesyonel bir geliştirici gibi çözmeye hazırsınız!



Python öz: StackOverflow Questions