Câu hỏi TypeError: Thiếu 1 đối số vị trí bắt buộc: 'self'


Tôi mới đến python và đã đánh một bức tường. Tôi theo một số hướng dẫn nhưng không thể vượt qua lỗi:

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'

Tôi đã kiểm tra một số hướng dẫn nhưng dường như không có gì khác với mã của tôi. Điều duy nhất tôi có thể nghĩ là python 3.3 yêu cầu cú pháp khác nhau.

chính scipt:

# test script

from lib.pump import Pump

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

p = Pump.getPumps()

print (p)

Lớp bơm:

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

Nếu tôi hiểu chính xác "tự" được truyền cho hàm tạo và các phương thức một cách tự động. Tôi làm gì sai ở đây?

Tôi đang sử dụng windows 8 với python 3.3.2


76
2017-07-08 19:21


gốc




Các câu trả lời:


Bạn cần khởi tạo một cá thể lớp ở đây.

Sử dụng

p = Pump()
p.getPumps()

Ví dụ nhỏ -

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


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

111
2017-07-08 19:23



ABC không phải là một ví dụ điển hình như viết tắt của Abstract Base Class. - Daniel Roseman
Đã thử rằng trước nhưng đã bị mất "()". Có phải là mới trong python 3.x? - DominicM
Rất tiếc. Không nhận ra. Sửa chữa nó. Lấy làm tiếc. - Sukrit Kalra
@DominicM: Không, điều đó luôn ở đó. - Sukrit Kalra
Yup, nhìn lại hướng dẫn tôi theo sau, bộ não của tôi phải có chỉ bôi đen ra các dấu ngoặc :) - DominicM


Trước tiên, bạn cần phải khởi chạy:

p = Pump().getPumps()

28
2017-07-08 19:23



Tính đơn giản thường được đánh giá thấp. - theeastcoastwest
Làm điều này sẽ làm cho p bằng phương thức getPumps (), trong khi điều này sẽ chạy p sẽ không được 'sử dụng' làm biến cho lớp Pump (). Đây không phải là cách thực hành tuyệt vời như là việc tạo ra một biến vô dụng. Nếu mục tiêu duy nhất là chạy hàm getPumps, thì nó sẽ hoạt động chỉ cần chạy Pump (). GetPumps () thay vì tạo một biến cho hàm. - Ashmoreinc


Bạn cũng có thể gặp lỗi này bằng cách lấy lời khuyên của PyCharm sớm để chú thích một phương thức @staticmethod. Xóa chú thích.


1
2017-12-03 15:58





Tôi đã có một vấn đề tương tự. Một đoạn mã của tôi trông như thế này:

class player(object):
    def update(self):
        if self.score == game.level:
            game.level_up()

class game(object):
    def level_up(self):
        self.level += 1

Nó cũng đã cho tôi rằng lỗi về việc thiếu self. Tôi đã giải quyết nó bằng cách gõ game.level_up(game) thay vì game.level_up().

Nó cũng có tác dụng với bạn.


-1
2018-05-30 08:50