2013-07-08 12 views
61

Python'da yeniyim ve duvara çarptım. Birkaç öğreticiler takip ama cant hata geçmiş olsun:TypeError: Gerekli 1 konumsal argüman eksik: 'self'

Traceback (most recent call last): 
    File "C:\Users\Dom\Desktop\test\test.py", line 7, in <module> 
    p = Pump.getPumps() 
TypeError: getPumps() missing 1 required positional argument: 'self' 

Birkaç öğreticiler incelenmiş ama benim kodundan farklı bir şey olmak görünmüyor. Düşünebildiğim tek şey, python 3.3'ün farklı bir sözdizimi gerektirmesi.

ana The Script:

# test script 

from lib.pump import Pump 

print ("THIS IS A TEST OF PYTHON") # this prints 

p = Pump.getPumps() 

print (p) 

Pompa sınıfı:

Eğer doğru anlamak
import pymysql 

class Pump: 

    def __init__(self): 
     print ("init") # never prints 


    def getPumps(self): 
       # Open database connection 
       # some stuff here that never gets executed because of error 

"öz" otomatik yapıcı ve yöntemlere geçirilir. Burada neyi yanlış yapıyorum? Python 3.3.2

cevap

90

pencereler 8 kullanıyorum

Burada bir sınıf örneğini gerekir.

Kullanım

p = Pump() 
p.getPumps() 

Küçük bir örnek - Önce sen ilklendirmelisiniz

>>> class TestClass: 
     def __init__(self): 
      print "in init" 
     def testFunc(self): 
      print "in Test Func" 


>>> testInstance = TestClass() 
in init 
>>> testInstance.testFunc() 
in Test Func 
+6

ABC, Temel Tabanlı Sınıf anlamına gelen iyi bir örnek değildir. –

+0

Daha önce denedim ancak "()" eksikti. Bu python 3.x'te yeni mi? – DominicM

+1

Hata. Farkında değildi. Düzeltiyorum. Afedersiniz. –

24

:

p = Pump().getPumps() 
+3

Basitlik genellikle düşük puanlıdır. – theeastcoastwest

+4

Bunu yapmak, getPumps() yöntemine p eşit olurken, bu, p (p), Pump() sınıfı için bir değişken olarak 'kullanılabilir' olmaz. Bu, işe yaramaz bir değişken yaratarak büyük bir uygulama değildir. Tek amaç, getPumps işlevini çalıştırmaksa, bu yalnızca işlev için bir değişken oluşturmak yerine Pump(). GetPumps() komutunu çalıştırırdı. – Ashmoreinc

1

Ayrıca erken bir not eklemek için pycharm tavsiyesine alarak bu hatayı alabilirsiniz yöntem @staticmethod. Ek açıklamayı kaldırın.

İlgili konular