2016-12-13 2 views
-1

Я пытаюсь наследовать от этого класса:Ошибка метода Unbound метода Python?

class Event(Clock, Calendar): 

    def __init__(self): 
     year,month,day, hours, minutes,seconds = time.localtime()[0:6] 

     eClock = Clock(hours,minutes,0) 
     eCal = Calendar(month, day, year) 

    def createEvent(self,year,month,day,hours,minutes): 
     year,month,day = date[0:] 
     hours,minutes = ttime[0:2] 

Для того, чтобы создать событие здесь:

sett = line[1:].split(",") # Line[1:] is going to be a 
          # date, such as 1/8/17 17:50. 
date = sett[0] 
ttime = sett[1] 
ttime = ttime.split(":") 
date = date.split("/") 
Cevent = ttime + date 
Cevent.event() 

У меня есть еще один класс, названный Reminder, что inits это:

event = Event.createEvent() 

В любое время, когда я пытаюсь запустить эту программу, это дает мне эту ошибку:

TypeError: unbound method createEvent() must be called with Event instance as first argument (got nothing instead)

Мне интересно, почему и как я могу использовать метод createEvent и использовать его в другом классе в том же файле.

+0

На самом деле я не знаю, чего вы пытаетесь достичь здесь. Ошибка заключается в том, что 'createEvent' является обычным методом, делает его« classmethod' или 'staticmethod' или вызывает его в реальном экземпляре' Event(). CreateEvent() '. Но я действительно не знаю, что ваш класс пытается сделать, потому что ничего не сохраняется как свойства и ничего не возвращается. – MSeifert

+0

Если 'createEvent' не предназначен для атрибута экземпляра, вы можете так же легко определить его на уровне модуля - он не должен быть в классе. Если вы хотите, чтобы метод класса вместо метода экземпляра украшал/определял его так: -https: //docs.python.org/3/library/functions.html#classmethod. Для статического метода - https://docs.python.org/3/library/functions.html#staticmethod. – wwii

+0

http://stackoverflow.com/a/27568860/2823755 - Вы должны посмотреть на все ответы в Q & A. – wwii

ответ

0

Связанный метод означает, что метод вызывается из класса. Давайте посмотрим на примере:

class MyClass: 
    def add(self, x, y): 
     return x+y 

против

def add_numbers(x, y): 
    return x+y 

метода add_numbers() представляет собой несвязанный метод, то есть он не привязан к какому-либо экземпляру класса. Для того, чтобы использовать его, мы можем просто позвонить:

print(add_numbers(1, 2)) 

Однако, когда мы хотим вызвать метод Add(), нам нужен экземпляр из класса MyClass:

class_instance = MyClass() 
print(class_instance.add(1, 2)) 

Обратите внимание, что при мы хотим вызвать метод add(), сначала нам нужно создать новый экземпляр класса, а затем использовать его для вызова метода. Под капотом python принимает переменную class_instance и передает ее методу в качестве ' self "в определении функции.

В заключение, ваш вопрос находится в строке:

event = Event.createEvent() 

ошибка говорит вам, что метод ожидает экземпляр класса событий, а не сам класс. Если класс событий может быть реализован без аргументов, то правильный синтаксис будет:

base_event = Event() 
event = base_event.createEvent() 

Конечно, метод экземпляра base_event переменной будет зависеть от API, который вы пытаетесь использовать.

Смежные вопросы