2012-07-21 9 views
6

Son birkaç gün içinde python öğrenmeye başladım ve nesne yönelimli programlamayı keşfederken sorunlara yol açıyorum. Ben pydev eklentisini çalıştırırken Eclipse kullanıyorum, python 3.3 beta üzerinde çalışıyorum ve bir windows 64 bit sistemi kullanıyorum.Python'da diğer sınıflar nasıl doğru şekilde genişletilir? (python v3.3)

Sınıfı ilklendirebilir ve üst sınıfını genişletmeye çalışmıyorum (örneğin, farklı bir kaynak dosyada kodladığım her sınıf). Örneğin, aşağıdaki kod derler ve iyi çalışıyor.

class pythonSuper: 
    string1 = "hello" 
    def printS(): 
     print pythonSuper.string1 

ve erişim ve çalıştırmak için kod

...

from stackoverflow.questions import pythonSuper 
class pythonSub: 
    pysuper = pythonSuper.pythonSuper() 
    pysuper.printS() 

Dediğim gibi, onlar olur. Aşağıdaki kod, bu doğru değildir. Bu, bu doğru değildir. Süper sınıfı kesinlikle en azından benim bilgime göre. Bu alt sınıf Eclipse bu hatayı

Traceback (most recent call last): 
    File "C:\Users\Anish\workspace\Python 3.3\stackoverflow\questions\pythonSub.py",   
    line 7, in <module> 
class pythonSub(pythonSuper): 
TypeError: module.__init__() takes at most 2 arguments (3 given) 

Ben neler olduğunu hiç bir fikrim yok yazdırır çalıştırılır

from stackoverflow.questions import pythonSuper 
class pythonSub(pythonSuper): 
    pass 

pythonObject = pythonSub() 
pythonSub.pythonSuper.printS() 

dışarı weirds alt sınıf bu. Thenewboston'ın öğreticilerinden python öğreniyorum, ama bunlar modası geçmiş (ben onun eğitim kodunun python sürüm 2.7'yi kullandığını düşünüyorum). Ayrıca IDLE kodluyor, bu da sınıflarının hepsinin tek bir dosyada yer aldığı anlamına geliyor. Ancak, benimki, hepsi kendi dosyalarında kodlanmış. Bu benim aldığım kod hatalarının, güncel sözdizimi veya bu dilde bilgi eksikliğimin sonucu olup olmadığı hakkında hiçbir fikrim yok anlamına geliyor. Ama ben digress. Herkes bir çözümle ve/veya kodun neden yanlış gittiğini ve/veya düzeltmek için neler yapabileceğimi açıkladıysa. Bir açıklama tercih edilir. Neyi yanlış yaptığımı bilmeyi tercih ediyorum. Bu nedenle, bazı durumlarda kopyaları kopyalayıp yapıştırmak ve işe yaradığını görmek yerine, benzer durumlardaki sorunu önlemek ve düzeltmek. Teşekkürler, ve ben de yanıtları bekliyorum,

cevap

0

pythonSuper sınıfı değil, modüle karşılık gelir.

class pythonSub(pythonSuper.pythonSuper): 
    pass 
+0

teşekkürler, ama şimdi bu hatayı gönderiyor Traceback (son çağrı son): Dosya "C: \ Users \ Anish \ workspace \ Python 3.3 \ stackoverflow \ questions \ pythonSub."Py, pythonSub.pythonSuper.printS() AttributeError satır 11: tip nesne 'pythonSub' hayır özelliği 'ni pythonSuper' vardır ve kimseyi rahatsız etmek istemiyorum, ama herhangi bir neden – pipsqueaker117

+3

Neden beklediğiniz pythonSub pythonSuper'ı genişletiyor, onu içermiyor. 'printS' kalıtsaldır ve doğrudan pythonSub örneğiniz üzerinden erişebilirsiniz. –

+0

@DanielRoseman Üzgünüm, başımdan biraz uçtu. , um, noob dil? (Alternatif olarak tüm bu şeyleri öğrenebileceğim bir sayfaya bağlayabilirsiniz.) – pipsqueaker117

3

Kodunuzu, birkaç değişiklikle de olsa çalıştırdım ve mükemmel çalışıyor. İşte benim kodudur:

pythonSuper:

class pythonSuper: 
    string1 = 'hello' 
    def printS(self): 
     print(self.string1) 

ana:

from pythonSuper import pythonSuper as pySuper 

class pythonSub(pySuper): 
    pass 

pythonObject = pythonSub() 
pythonObject.printS() 

NOT: kodunda

: Kuralların yaptığınız değişiklik şuduraracılığıyla zaten printS() yöntemini desteklediğinden, doğru olmayan pythonSub.pythonSuper.printS() yazdınız d, doğrudan süper sınıftan miras alındı. Bu nedenle, ekstremiteye açıkça bu ifadede başvurmaya gerek yoktur. Yukarıda adı geçen, pythonObject.printS() yerine kullanılan ifade, bu sorunu ele almış görünüyor.

+0

Bu bana Traceback hatası veriyor (son çağrı son): Dosya "C: \ Users \ Anish \ workspace \" Python 3.3 \ stackoverflow \ questions \ pythonSub.py ", satır 8, sınıfı pytho nSub (pySuper): TypeError: module .__ init __() en çok 2 argüman alır (3 verilen) Kod kopyalayıp yapıştırmayı denedim (kendi paket adıyla), ancak sonuç yukarıdaki hataydı. Ben bir python 3.3 sözdizimi şey düşünmeye başlıyorum çünkü iki çözüm zaten başarısız (anlamıyla program doğru çalışmadı), ama ben tamamen – pipsqueaker117

+0

işareti kapalı olabilir. Lütfen kodu ve hata benim için size daha iyi yardımcı olabilir. Kodun versiyonunda yaptığınız bir hata olduğuna inanıyorum, yukarıdaki python 3.3'ü yazdım ve harika çalıştı! – NlightNFotis

İlgili konular