ما يسبب "غير منضم طريقة __init__() يجب أن تسمى سبيل المثال كما الوسيطة الأولى" من هذا الثعبان رمز ؟

StackOverflow https://stackoverflow.com/questions/1615148

  •  06-07-2019
  •  | 
  •  

سؤال

لدي هذه الفئة:

from threading import Thread 
import time

class Timer(Thread): 
    def __init__(self, interval, function, *args, **kwargs): 
        Thread.__init__() 
        self.interval = interval 
        self.function = function 
        self.args = args 
        self.kwargs = kwargs 
        self.start()

    def run(self): 
        time.sleep(self.interval) 
        return self.function(*self.args, **self.kwargs) 

و اتصل مع هذا البرنامج النصي:

    import timer 
    def hello():
        print \"hello, world
    t = timer.Timer(1.0, hello)
    t.run()

والحصول على هذا الخطأ وأنا لا يمكن معرفة لماذا: unbound method __init__() must be called with instance as first argument

هل كانت مفيدة؟

المحلول

وأنت تفعل:

Thread.__init__() 

استخدم:

Thread.__init__(self) 

وأو، بدلا من ذلك، استخدام super()

نصائح أخرى

وهذا هو السؤال المتداولة في SO، ولكن الجواب باختصار، هو أن الطريقة التي ندعو منشئ الفائقة الخاص بك مثل:

super(Timer,self).__init__()

والأولى، والسبب يجب استخدام:

Thread.__init__(self)

وبدلا من

Thread.__init__()

ولأن كنت تستخدم اسم الفئة، وليس كائن (مثيل الطبقة)، وبالتالي لا يمكنك استدعاء أسلوب بالطريقة نفسها ككائن.

وثانيا، إذا كنت تستخدم بيثون 3، وأسلوب الموصى بها لالاحتجاج أسلوب فئة السوبر من فئة فرعية هي:

super().method_name(parameters)

وعلى الرغم من أن في بيثون 3 من الممكن استخدام:

SuperClassName.method_name(self, parameters)

ووهو النمط القديم من بناء الجملة التي ليست تفضل النمط.

أنت فقط تحتاج إلى تمرير "الذات" كحجة 'الموضوع.الحرف الأول'.بعد ذلك يعمل على الآلات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top