2013-07-08 4 views
61

Я новичок в python и ударил стену. Я последовал за несколько учебников, но не могу пройти мимо ошибки:ТипError: Отсутствует 1 обязательный позиционный аргумент: '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' 

я изучил несколько учебников, но не кажется, что будет что-нибудь отличное от моего кода. Единственное, о чем я могу думать, это то, что python 3.3 требует другого синтаксиса.

главный scipt:

# test script 

from lib.pump import Pump 

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

p = Pump.getPumps() 

print (p) 

Класс насоса:

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 

Если я правильно понимаю, "я" передается в конструктор и методы автоматически. Что я здесь делаю неправильно?

Я использую Windows 8 с питоном 3.3.2

ответ

90

Вам нужно создать экземпляр экземпляра класса здесь.

Использование

p = Pump() 
p.getPumps() 

Небольшой пример -

>>> 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 не является хорошим примером, так как это означает абстрактный базовый класс. –

+0

Пробовал это раньше, но не хватало "()". Это новое в python 3.x? – DominicM

+1

Упс. Не понял. Фиксация. Сожалею. –

24

Вы должны инициализировать его первым:

p = Pump().getPumps() 
+3

Простота часто недооценивается. – theeastcoastwest

+4

Это сделало бы p равным методу getPumps(), в то время как это запустило бы p, не было бы «пригодным для использования» в качестве переменной для класса Pump(). Это не очень хорошая практика, потому что она создает бесполезную переменную. Если единственная цель - запустить функцию getPumps, тогда она будет работать только с запущенным Pump(). GetPumps() вместо создания переменной для этой функции. – Ashmoreinc

1

Вы также можете получить эту ошибку, преждевременно советоваться PyCharm для аннотирования метод @staticmethod. Удалите аннотацию.

Смежные вопросы