it-swarm.asia

TypeError: مفقود حجة موضعية واحدة مطلوبة: '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'

لقد درست عدة برامج تعليمية ولكن لا يبدو أن هناك أي شيء مختلف عن الكود الخاص بي. الشيء الوحيد الذي يمكنني التفكير فيه هو أن بيثون 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

إذا فهمت بشكل صحيح "النفس" يتم تمريرها إلى المنشئ والأساليب تلقائيا. ماذا أفعل الخطأ هنا؟

أنا أستخدم ويندوز 8 مع بيثون 3.3.2

127
DominicM

تحتاج إلى إنشاء مثيل فئة هنا.

استعمال

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
162
Sukrit Kalra

تحتاج إلى تهيئته أولاً:

p = Pump().getPumps()
35
JBernardo

يمكنك أيضًا الحصول على هذا الخطأ من خلال أخذ نصيحة PyCharm قبل الأوان لتوضيح طريقةstaticmethod. أزل الشرح.

2
gherson

"الذات" الكلمة الأساسية في python مشابهة لـ "this" الكلمة الأساسية في c ++/Java/c #.

في بيثون 2 يتم ذلك ضمنيًا بواسطة المترجم (yes python does compilation internally). إنه فقط في python 3 تحتاج إلى ذكره explicitly في المنشئ ووظائف الأعضاء. مثال:

 class Pump():
 //member variable
 account_holder
 balance_amount

   // constructor
   def __init__(self,ah,bal):
   |    self.account_holder = ah
   |    self.balance_amount = bal

   def getPumps(self):
   |    print("The details of your account are:"+self.account_number + self.balance_amount)

 //object = class(*passing values to constructor*)
 p = Pump("Tahir",12000)
 p.getPumps()
0
Tahir77667