Python sınıfı nesne parametresi

Bir sƒ±nƒ±f nesnesinin kabul ettiƒüi argumanlar, __init__() adlƒ± bir i≈ülevden geçirilir. Bu i≈ülevi sƒ±nƒ±f bildiriminizde yanlƒ±≈ü yazarsanƒ±z, "TypeError: object() arguman almaz‚" kodunuzu çalƒ±≈ütƒ±rdƒ±ƒüƒ±nƒ±zda hata veriyor.

Bu kƒ±lavuzda, bu hatanƒ±n ne anlama geldiƒüinden ve neden kar≈üƒ±la≈üabileceƒüinizden bahsediyoruz. Nasƒ±l duzelteceƒüinizi anlamanƒ±za yardƒ±mcƒ± olmak için bu hatanƒ±n bir √∂rneƒüini inceleyeceƒüiz.

TypeError: object() arguman almaz

Bir sƒ±nƒ±fƒ±n nesneleri isteƒüe baƒülƒ± olarak argumanlarƒ± kabul edebilir. Bu baƒüƒ±msƒ±z deƒüi≈ükenler, bir nesne içindeki deƒüerleri ayarlamak için kullanƒ±lƒ±r. A≈üaƒüƒ±daki kodu g√∂z √∂nunde bulundurun:

__init__method, "self.name‚" Sƒ±nƒ±fƒ±mƒ±zdaki deƒüi≈üken. Bu deƒüi≈ükene sƒ±nƒ±fƒ±mƒ±zdaki herhangi bir metotta ba≈üvurabiliriz.

__init__ metodu özel bir metottur. Genellikle yapıcı olarak adlandırılır. Yapıcı yöntemi doğru yazılmalıdır, aksi takdirde bir sınıfın nesnesini bildirdiğiniz bir ifadeye herhangi bir arguman iletemezsiniz.

Ba≈üvuru için, __init__ y√∂ntemi ≈üu ≈üekilde yazƒ±lƒ±r:

ƒ∞ki alt çizgi, ardƒ±ndan "init‚", ardƒ±ndan iki altçizgi gelir.

"TypeError: object() hiçbir arguman almaz‚" hata, uygun olmayan girintilerden de kaynaklanabilir. __init__ y√∂ntemini doƒüru yazdƒ±ysanƒ±z, sƒ±nƒ±fƒ±nƒ±zda tutarlƒ± bo≈üluklar ve sekmeler kullandƒ±ƒüƒ±nƒ±zdan emin olmak için kontrol edin.

Katƒ±lƒ±mcƒ±larƒ±n %81’i bir eƒüitim kampƒ±na katƒ±ldƒ±ktan sonra teknik i≈ü beklentileri konusunda daha emin hissettiklerini belirtti. Bugun 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ƒ±.

Olu≈üturacaƒüƒ±z. elektronik maƒüazasƒ±ndaki bir urunle ilgili bilgileri izleyen bir program. Ba≈ülamak için bir sƒ±nƒ±f tanƒ±mlayƒ±n. Bu sƒ±nƒ±f, urunlerimiz için plan g√∂revi g√∂rur:

Sƒ±nƒ±fƒ±mƒ±z iki y√∂ntem içeriyor. ƒ∞lk y√∂ntem yapƒ±cƒ±mƒ±zdƒ±r. Bu metot, sƒ±nƒ±fƒ±mƒ±zƒ±n nesnelerinin saklayabileceƒüi tum deƒüerleri tanƒ±mlar. ƒ∞kinci y√∂ntem, bir urunun fiyatƒ±nƒ± g√∂rmemizi saƒülar.

Sonra, sınıfımızın bir nesnesini oluşturacağız:

Bu kod, a烱k olan bir George Foreman ƒ±zgarasƒ± için bir nesne olu≈üturur elektronik maƒüazasƒ±nda satƒ±≈ü. Ardƒ±ndan, bu urunun fiyatƒ±nƒ± g√∂rebilmemiz için show_price() y√∂ntemimizi çaƒüƒ±racaƒüƒ±z:

Kodumuzu çalƒ±≈ütƒ±ralƒ±m ve ne olduƒüunu g√∂relim:

Kodumuz bir hata mesajı döndurur.

Çözum

ƒ∞çerideki deƒüi≈ükenlere ba≈ülangƒ±ç ‚Äã‚Äãdeƒüerleri atamak için bir nesne, bir nesnenin bildirildiƒüi ifadede bu deƒüi≈ükenlerin deƒüerlerini arguman olarak belirtmeniz gerekir.

Bu, yalnƒ±zca bir nesnede geçerli bir __init__ y√∂ntemi varsa çalƒ±≈üƒ±r. Aksi takdirde Python, belirttiƒüiniz deƒüerleri arguman olarak nasƒ±l ele alacaƒüƒ±nƒ± bilemez. √ñzel bir __init__ y√∂ntemi olmadan Python, argumanlarƒ± hangi y√∂ntemin i≈ülemesi gerektiƒüini bilemez.

Kodumuzda, bir _init_ y√∂ntemi bildirdik (her iki tarafta bir alt çizgi ile):
< /p>

Bu, __init__ ile aynƒ± ≈üekilde ele alƒ±nmaz. Bu hatayƒ± ç√∂zmek için, bu y√∂ntemi doƒüru s√∂zdizimini kullanacak ≈üekilde yeniden adlandƒ±rmalƒ±yƒ±z:

Y√∂ntemimizi __init__ olarak yeniden adlandƒ±rdƒ±k. Kodumuzu çalƒ±≈ütƒ±ralƒ±m ve çalƒ±≈üƒ±p çalƒ±≈ümadƒ±ƒüƒ±nƒ± g√∂relim:

Kodumuz bize George Foreman ızgarasının fiyatını başarıyla söyluyor.

TypeError: bu yapıcı arguman almıyor

"TypeError: object() arguman almƒ±yor‚" hatasƒ± "TypeError: bu yapƒ±cƒ± Python 2.x’te hiçbir arguman almaz‚"

Bu mesaj bize, yapƒ±cƒ±mƒ±zƒ± tanƒ±mlarken bir hata yaptƒ±ƒüƒ±mƒ±zƒ± s√∂yluyor. Bu sorunu ç√∂zmek için __init__() y√∂nteminin doƒüru olduƒüundan ve hataya neden olan sƒ±nƒ±fta doƒüru girintiyi kullandƒ±ƒüƒ±nƒ±zdan emin olun.

Sonuç

"TypeError: object() alƒ±r Arguman kabul eden bir sƒ±nƒ±fta __init__ adlƒ± bir y√∂ntem bildirmediƒüinizde hiçbir arguman‚" hatasƒ± olu≈ümaz.

Bu hatayƒ± ç√∂zmek için kodunuzu iki kez kontrol ederek __init__( ) doƒüru yazƒ±lmƒ±≈ü. Y√∂ntemin her iki tarafƒ±nda iki alt çizgi olmalƒ±dƒ±r. kelime "init‚".

Artık bu yaygın Python hatasını bir profesyonel gibi!