TypeError: गुम 1 आवश्यक स्थिति तर्क: 'स्व'


217

मैं अजगर के लिए नया हूं और एक दीवार से टकरा गया हूं। मैंने कई ट्यूटोरियल्स का अनुसरण किया, लेकिन त्रुटि का सामना नहीं करना चाहिए:

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

यदि मैं सही ढंग से समझता हूं कि "स्व" निर्माणकर्ता और विधियों को स्वचालित रूप से पारित हो जाता है। मुझसे यहां क्या गलत हो रहा है?

मैं अजगर 3.3.2 के साथ विंडोज 8 का उपयोग कर रहा हूं

जवाबों:


281

आपको यहां एक क्लास इंस्टेंस को इंस्टेंट करना होगा।

उपयोग

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

1
कोशिश की कि पहले लेकिन याद नहीं था "()"। क्या अजगर 3.x में नया है?
डोमिनिक M

1
@DominicM: नहींं, वह हमेशा से रहा है।
Sukrit Kalra

1
हाँ, ट्यूटोरियल के बाद वापस देख, मेरा दिमाग सिर्फ कोष्ठक से बाहर हो गया होगा :)
डोमिनिकM

4
वर्ग के नाम ऊपरी मामला होना चाहिए, यानी, 'टेस्टक्लास' 'टेस्टक्लास' होना चाहिए
एगोनगल्स

1
धन्यवाद, कक्षा तात्कालिकता पर अनुपलब्ध कोष्ठक मेरी समस्या थी। आपका उदाहरण सुपर स्पष्ट है।
पॉल वॉटसन

57

आपको इसे पहले शुरू करने की आवश्यकता है:

p = Pump().getPumps()

14
सादगी अक्सर अंडर रेटेड है।
एस्टेकास्टवेस्ट

14
ऐसा करने से p, getPumps () के बराबर हो जाएगा, जबकि यह p पंप () वर्ग के लिए एक चर के रूप में 'usable' नहीं होगा। यह एक महान चर के रूप में अपने अन्याय के रूप में महान अभ्यास imo नहीं है। यदि एकमात्र लक्ष्य getPumps फ़ंक्शन को चलाना है, तो यह फ़ंक्शन के लिए एक वैरिएबल बनाने के बजाय सिर्फ चल रहे पम्प ()। GetPumps () को चलाने का काम करेगा।
Ashmoreinc

7

मेरे द्वारा देखे गए हर दूसरे समाधान की तुलना में काम करता है और सरल है:

Pump().getPumps()

यह बहुत अच्छा है अगर आपको किसी वर्ग उदाहरण का पुन: उपयोग करने की आवश्यकता नहीं है। पायथन 3.7.3 पर परीक्षण किया गया।


2

आप समय-समय पर PyCharm की सलाह लेने के लिए एक विधि @staticmethod को एनोटेट करके भी यह त्रुटि प्राप्त कर सकते हैं। एनोटेशन निकालें।


1

'स्वयं' कीवर्ड में अजगर है अनुरूप करने के लिए 'इस' c ++ / जावा / सी # में कीवर्ड।

अजगर 2 में यह संकलक द्वारा अंतर्निहित रूप से किया जाता है (yes python does compilation internally)। यह सिर्फ इतना है कि अजगर 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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.