farklı class dan method çağırırken self ( missing 1 required positional argument ) hatası

16 views
Skip to first unread message

Emrah SAKARYA

unread,
Feb 25, 2019, 3:25:43 AM2/25/19
to Python Istanbul
merhabalar bir classdan diğer classdaki method çağırdığımda missing 1 required hatası alıyorum self parametresini istiyor


class A():
def out(self, isim):
return isim


class B():
def name():
S=A()
A.out(isim)

bu şekilde b klasındaki name methodundan a klasındaki our methoduna isim verisini göndermek istediğimde ( A classini

_inherit ile kullanıyorum o yüzden self parametresi bana gerekli, TypeError: __init__() missing 1 required positional argument: 'isim'

bi kaç örneklere baktım ama her seferinde farklı fakrlı hatalar veriyor. teşekkürler


Ramazan Çevik

unread,
Feb 25, 2019, 3:31:28 AM2/25/19
to python-...@googlegroups.com
merhaba mert, muhtemelen hatayı A classında __init__ tanımlamadığın için alıyorsun, out fonksiyonuyla alakası olduğunu sanmıyorum. 

saygılarımla, 
Ramazan Çevik

25 Şub 2019 Pzt 11:25 tarihinde Emrah SAKARYA <emrhs...@gmail.com> şunu yazdı:
--
Bu iletiyi Google Grupları'ndaki "Python Istanbul" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için python-istanb...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için https://groups.google.com/d/optout adresini ziyaret edin.

Aybars Badur

unread,
Feb 25, 2019, 3:44:42 AM2/25/19
to python-...@googlegroups.com
Emrah selam,

def out(self, ...):

dedigin A classinda binded method - yada instance methodu, onu A.out diyip cagiramazsin - class methodu degil cunku. 

s = A()
s.out('foo')

diye cagirman lazim ki self parametresine "s" instanceini gecebilsin, yoksa self bos kalacak hata verecek vs.



--
Aybars Badur
DON'T PANIC

İsmail Arılık

unread,
Feb 25, 2019, 4:20:27 AM2/25/19
to python-...@googlegroups.com
@Ramazan Çevik, sorun __init__'in olmaması değil.

@Aybars Badur, A.out diyerek çağrılabilir.

@Emrah SAKARYA, siz self parametresine isim vermişsiniz, isim parametresi de boş kalmış, hatanın sebebi bu. self'e bir A nesnesi, isim'e de ilgili bir argüman verirseniz sorun ortadan kalkar:

Python'da nesne, nesne metodu, sınıf metodu, statik metod, vb. kavramlar diğer bilindik dillere göre biraz farklı anlamlar taşırlar. Bu sebeple Python'da bunları kullanırken diğer diller ile kıyaslama yapmamak ve en baştan iyi şekilde öğrenmek, sonrasında zaman kaybetmemek adına önemlidir. Örneğin; Python nesne metodlarını sınıftan bağımsız normal fonksiyon gibi düşünün. Bunları Sınıf.metod sözdizimi ile çağırabilirsiniz. Ancak self parametresini vermeniz gerekir. Ancak eğer nesne.metod sözdizimi ile bu fonksiyonları çağırırsanız Python self'i otomatik vereceği için bunu sizin vermenize gerek kalmaz. Python self'i parametrelerde yazmayı zorunlu kılarak explicit over implicit kuralına uyduğunu söylüyor ancak self'i kendisi otomatik geçirerek bu kuralı bozuyor.

Bu arada name metodunuzda self parametresi yok, bu metodu nasıl kullanmayı düşünüyorsunuz?

25 Şub 2019 Pzt, 11:44 tarihinde, Aybars Badur <aybars...@gmail.com> şunu yazdı:
--

İsmail Arılık - https://forum.yazbel.com/

İsmail Arılık

unread,
Feb 25, 2019, 4:21:04 AM2/25/19
to python-...@googlegroups.com
Pardon ya kodu koymayı unuttum =D

S=A()
A.out(s, isim)

25 Şub 2019 Pzt, 12:20 tarihinde, İsmail Arılık <arilik...@gmail.com> şunu yazdı:

Aybars Badur

unread,
Feb 25, 2019, 5:22:52 AM2/25/19
to python-...@googlegroups.com
@Aybars Badur, A.out diyerek çağrılabilir.

cagirilmaz, yani iki parametre gecerek cagirabilirsin tabii - senin de dedigin gibi ama tek parametre gecersen, self bos kalir :) cok istersen metodu baska bi yerde ezip, selfi de doldurup da gonderebilirsin tabii. 

ama asil self diye bir parametre varsa, beklenti onun instance olmasi gerektigi - mantik olarak yani. yoksa kodu okuyan adamin beyni yanabilir bence :)

İsmail Arılık

unread,
Feb 25, 2019, 6:13:08 AM2/25/19
to python-...@googlegroups.com
Ama mesela multiple inheritance'ta tüm ana sınıfların __init__ metodlarını çağırmak istersek Sınıf.__init__(self) diye çağırmamız gerekir. Bu da normal bir durum. Demek istediğim nesne metodlarının nesneden çağrılmadığı normal hatta zorunlu durumlar da var.

25 Şub 2019 Pzt, 13:22 tarihinde, Aybars Badur <aybars...@gmail.com> şunu yazdı:
Reply all
Reply to author
Forward
0 new messages