Python çağrılabilir

Python işlevleri ve meth

Python modülleri, özellikle kendinizinkini tanımladığınızda kafa karıştırıcıdır. “TypeError: ‘module’ nesne çağrılabilir değil” Python geliştiricilerinin sınıflarla çalışırken yaptığı en yaygın hatalardan biridir.

Bu kılavuzda, bu hatanın ne anlama geldiği ve neden ortaya çıktığı hakkında konuşuyoruz. Bu hatanın üstesinden gelmenize yardımcı olmak için örnek bir kod parçacığı üzerinden geçiyoruz. Haydi başlayalım!




Sorun: TypeError: ‘module’ nesne çağrılabilir değil

Herhangi bir Python dosyası “.py” uzantısıyla bittiği sürece bir modüldür.

Modüller, bir ana programın dışında işlevleri, değişkenleri ve sınıfları tanımlamanıza izin verdikleri için Python'un çok önemli bir parçasıdır. Bu, kodunuzu birden çok dosyaya bölebileceğiniz ve daha etkin bir şekilde kategorilere ayırabileceğiniz anlamına gelir.

Modüller belirli bir şekilde içe aktarılmalıdır. Aksi takdirde, Python bir hata döndürür:

TypeError: 'module' nesnesi çağrılabilir değil

Bu, bir modülü işlev olarak içe aktarmaya çalıştığınızda olur.




Örnek Senaryo

“cakes” adlı bir modül tanımlayın. Bu modül bir fonksiyon içerir: read_file. read_file işlevi bir metin dosyasının içeriğini okuyacaktır.

Dosya adımız modülümüzün adını belirler. Modülümüzün adının “cakes” olmasını istediğimiz için, kodumuzu cakes.py adlı bir dosyaya yazıyoruz:

Katılımcıların %81'i, daha sonra teknik iş beklentileri konusunda daha emin hissettiklerini belirtti. bir bootcamp'a katılmak. Bugün bir eğitim kampı ile eşleşin.

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ı.

Bu işlev “cakes.txt” adlı bir dosyanın içeriğini okur. Daha sonra dosyadaki her metin satırını yineler ve her satırı “all_cakes” adlı bir listeye ekler.

replace() yöntemi, herhangi bir yeni satır (“ ”) karakterini boş bir değerle değiştirmek için kullanılır. Bu, tüm yeni satırları kaldırır. “all_cakes” fonksiyonumuzun sonunda.


Şimdi app.py adlı bir dosyayı açın ve şu kodu yapıştırın:

cakes import cake_list = cakes() print(cake_list)

Bu kod, “cakes.txt&rdquo içeriğini okumak için “cakes” modülümüzü kullanır. ; file. Ardından, fonksiyonun dosyada bulduğu tüm pastaları yazdırır.

Kodumuzu çalıştıralım:

Traceback (en son çağrı): Dosya "main.py", satır 3,  cakes = cakes() TypeError: 'module' nesnesi çağrılabilir değil 

Kodumuz bir hata döndürüyor.




Çözüm

import deyimi app.py dosyamızda:

“cakes” modülünü içe aktarıyoruz. Bu c “cakes.py” içinde bildirdiğimiz tüm değişkenleri, sınıfları ve işlevleri içerir; file.

Şimdi bir sonraki kod satırımıza bakalım:

cake_list = cakes()

“kekler” modül yalnızca bir işlev içerir, bu işlevin ne olduğunu belirtmiyoruz. Bu, Python'un kafasını karıştırır çünkü hangi fonksiyonla çalışması gerektiğini bilmez.

Bu hatayı çözmek için modülün kendisi yerine referans vermek istediğimiz fonksiyonun adını çağırırız:

kekleri içe aktar cake_list = cakes.read_file() print(cake_list)

Haydi&rsquo ;s kodumuzu tekrar çalıştırmayı deneyin:

['Cinnamon Babka', 'Chocolate Cupcake' ]

Kodumuz keklerin listesini başarıyla döndürür.

app.py dosyamızda cakes.read_file() öğesini çağırırız.
< /p>

Python, “cakes.py” dosyasına bakar. “keklerimiz” modül depolanır ve read_file() işlevini bulur. Ardından Python bu fonksiyonu çalıştırır.

read_file() fonksiyonunun sonucunu atarız. “cake_list” adlı bir değişken'e. Ardından bu listeyi konsola yazdırıyoruz.

Alternatif olarak read_file işlevini doğrudan programımıza aktarın:

keklerden import read_file cake_list = read_file() print(cake_list)

Kodumuz şunu döndürür:

"Python.Engineering hayatıma en çok ihtiyacım olduğu anda girdi ve hızlı bir şekilde bir eğitim kampıyla eşleşmeme yardımcı oldu. Mezun olduktan iki ay sonra, hayattaki değerlerim ve hedeflerim ile uyumlu hayalimdeki işi buldum!"

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

Kodumuz, “cakes” modül. Bu örnekte, “cakes” modül. Bunu yapmak yerine, “cakes” modül: read_file.


read_file dosyasını içe aktardığımızda, fonksiyonumuzu çağırmak için artık cakes.read_file() kullanmamız gerekmediğine dikkat edin. ) çünkü read_file() işlevini doğrudan kodumuza aktarıyoruz.