2016-06-18 2 views
-6

Я пришел, чтобы узнать, мы можем также сделать класс как отозвано без реализации функции __call__(), и я пытаюсь написать некоторые вещи, как это, но я застрял: ниже мой кодСоздание класса отозван в питоне

class neg: 
    def __init__(self): # Classes are callables too 
     self.val = 54545 
    def __repr__(self): 
     return str(self.val) 

if __name__=='__main__': 
     x=neg 
     print(x) #print(neg()) also shows nothing 
     #added by Merlin 
     print('value of x:', x) 

Выполнение вышеуказанного ничего не делает, оно не печатает, что я здесь отсутствует?

Примера я читал, чтобы сделать класс вызываемым:

class Negate: 
    def __init__(self, val): # Classes are callables too 
    self.val = -val # But called for object, not work 
    def __repr__(self): # Instance print format 
    return str(self.val) 
    actions = [square, sobject, pobject.method, Negate] # Call a class too 
    for act in actions: 
    print(act(5)) 

Я установил основной он работает, но когда они говорят, что класс может быть отозваны , то это не должно быть neg() не это ?

+0

Метод '__init__' является инициализатором. Это происходит, когда вы создаете экземпляр этого класса. Это никоим образом не является «вызываемым» в традиционном смысле. Пожалуйста, прочитайте документы или сообщите нам конкретно, чего вы пытаетесь достичь. – Zizouz212

+0

«Выполнение вышеуказанного ничего не делает, оно не печатает». Вы должны что-то делать неправильно, этот точный пример кода распечатывал '', когда я его запускал. –

+0

Tadhg, я исправил ошибку в соответствии с предложением, разве вы не увидели мой выделенный текст? –

ответ

1

Вам необходимо создать экземпляр класса для запуска метода __init__. И вам также нужно убедиться, что ваша программа запускается. Вы вызываете/создаете функцию, записывая do_something(); вы вызываете класс, записывая neg().

if __name__ == '__main__': # Fix the main so program starts 
    x = neg() # Call the class! 
    print(x) 

Увидев, что вы прокомментировали, что вам нужно «вызвать» класс, вы пробовали экспериментировать с ним? Вы должны были получить ответ. Посмотрите на раковине:

>>> neg 
<class __main__.neg at 0x103842db8> 
>>> neg() 
5435     # Displays the __repr__ return value. 

Если вы пишете функцию или класс, вам не нужно осуществить __call__, если вы делаете что-то сложное. Пожалуйста, найдите некоторые учебники или прочитайте документы.

0

Классы вызываются, только в том смысле, что вы «вызываете» класс для создания экземпляра класса. Вы вызываете класс с тем же синтаксисом, который вы вызываете функции, используя скобки и необязательные аргументы. Это не связано с вызовом, что влияет только на экземпляры.

+0

@Explorer_N: Я не совсем понимаю ваш комментарий. Я не знаю, что вы подразумеваете под «вызываемым классом». –

+0

Брайан, это первое, что приходит мне в голову, когда я читаю пример (где говорят, что классы вызываемы). Наконец, как все говорят, что они создают объект. то они не должны говорить, что классы вызываются, если они? –

+0

@Explorer_N: в каком примере вы говорите? Кто они"? –

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