প্রকারের ত্রুটি: 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 এর জন্য আলাদা সিনট্যাক্সের প্রয়োজন।

প্রধান লিপি:

# 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 ব্যবহার করছি

উত্তর:


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 এ কি নতুন?
ডমিনিকএম

1
@ ডমিনিকএম: না, সবসময় সেখানে রয়েছে।
সুকৃত কালরা

1
হ্যাঁ, আমি অনুসরণ করা টিউটোরিয়ালগুলির দিকে ফিরে তাকাই, আমার মস্তিষ্ক অবশ্যই বন্ধনীগুলি ব্ল্যাক করে দিয়েছে :)
ডমিনিক এম

4
শ্রেণীর নামগুলি বড় হাতের অক্ষর হওয়া উচিত, অর্থাত্ 'টেস্টক্লাস' 'টেস্টক্লাস' হওয়া উচিত
উদাহরণস্বরূপ

1
ধন্যবাদ, ক্লাস ইনস্ট্যান্টেশনে বন্ধনী হারিয়ে যাওয়া আমার সমস্যা ছিল। আপনার উদাহরণ অত্যন্ত পরিষ্কার।
পল ওয়াটসন

57

আপনাকে প্রথমে এটি শুরু করতে হবে:

p = Pump().getPumps()

14
সরলতা প্রায়শই নিম্ন-রেটযুক্ত হয়।
thyastcoastwest

14
এটি করার ফলে প্যাকে পাম্প () শ্রেণীর জন্য ভেরিয়েবল হিসাবে 'ব্যবহারযোগ্য' হতে হবে না, তবুও এই পদ্ধতিটি getPumps () এর সমান হবে। এটি কোনও অকেজো পরিবর্তনশীল তৈরির ন্যায়বিচার হিসাবে দুর্দান্ত অনুশীলন নয়। যদি গেটপમ્પস ফাংশনটি চালানো একমাত্র লক্ষ্য হয় তবে এটি ফাংশনের জন্য ভেরিয়েবল তৈরির পরিবর্তে পাম্প () .গেটপম্পস () চালানোর কাজ করবে।
আশমোরিনিক

7

আমি এখানে দেখতে পাই এমন প্রতিটি সমাধানের চেয়ে কাজ করে এবং সহজ:

Pump().getPumps()

আপনার যদি কোনও শ্রেণীর উদাহরণ পুনরায় ব্যবহার করার প্রয়োজন না হয় তবে এটি দুর্দান্ত। পাইথন ৩.7.৩ এ পরীক্ষা করা হয়েছে।


2

অযথা @ স্ট্যাটিকমেডোথের কোনও পদ্ধতিতে বিকাশের জন্য পাইচার্মের পরামর্শ গ্রহণ করে আপনিও এই ত্রুটিটি পেতে পারেন। টীকা মুছে ফেলুন।


1

'স্ব' শব্দ মধ্যে পাইথন অনুরূপ করতে 'এই' C ++ / জাভা / 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()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.