Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 14.10.2018, 20:20   #1
Palomnik1096
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 76
Репутация: 16
По умолчанию Класс в питоне

Доброго всем!

Написал класс в питоне, выдает ошибку:

Traceback (most recent call last):
File "C:/Users/79175/Desktop/Новая папка/Примеры/class4.py", line 16, in <module>
restaurant.number_served()
TypeError: 'int' object is not callable

Почему, не понимаю?

Код:

class Restaurant():
    def __init__ (self,restaurant_name,cuisine_type):
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
        self.number_served = 0

    def describe_restaurant(self):
        print ('Название ресторана: ' + self.restaurant_name)
        print ('Кухня ресторана: ' + self.cuisine_type)

    def number_served(self):
        print('Количество посетителей: ' + str(self.number_served) + '.')
        
restaurant = Restaurant('Relax','European')
restaurant.describe_restaurant()
restaurant.number_served()

Palomnik1096 вне форума   Ответить с цитированием
Старый 14.10.2018, 20:27   #2
New man
Участник клуба
 
Регистрация: 24.01.2011
Сообщений: 750
Репутация: 241
По умолчанию

В питоне функции являются объектами первого порядка.

Поэтому мы можем переиначивать функции:
Код:


f = lambda x: x + 1

print (f(5)) # Выведется 6

def f_minus(x):
    return x-1

f = f_minus

print (f(5)) # Выведется 4

f = 3
print(f) # Выведется 3
print(f(5)) # Будет та же ошибка, что и у тебя

Ты вот в этой строке заменил функцию на число.
Соответственно, число вызывать нельзя.
Рекомендую переименовать метод, например, на print_number_served.
Код:

self.number_served = 0

__________________
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума   Ответить с цитированием
Старый 14.10.2018, 20:31   #3
Palomnik1096
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 76
Репутация: 16
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
Ты вот в этой строке заменил функцию на число.
Соответственно, число вызывать нельзя.
Рекомендую переименовать метод, например, на print_number_served.
Код:

self.number_served = 0

Блин, так в книге написано)))
Palomnik1096 вне форума   Ответить с цитированием
Старый 14.10.2018, 20:34   #4
New man
Участник клуба
 
Регистрация: 24.01.2011
Сообщений: 750
Репутация: 241
По умолчанию

Рекомендую принять, что книги тоже не боги обжигают. Это дело рук человеческих, которые иногда ошибаются.
__________________
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума   Ответить с цитированием
Старый 14.10.2018, 20:48   #5
Palomnik1096
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 76
Репутация: 16
По умолчанию из книги

Цитата:
Сообщение от New man Посмотреть сообщение
Рекомендую принять, что книги тоже не боги обжигают. Это дело рук человеческих, которые иногда ошибаются.
вот фрагмент из книги
Изображения
Тип файла: jpg Новый точечный рисунок.jpg (82.4 Кб, 3 просмотров)
Palomnik1096 вне форума   Ответить с цитированием
Старый 14.10.2018, 21:20   #6
New man
Участник клуба
 
Регистрация: 24.01.2011
Сообщений: 750
Репутация: 241
По умолчанию

В книге, между прочим не ошиблись.
А ты ошибся.

Смотри:
У него поле называется "odometer_reading", а метод — "read_odometer"

А у тебя они оба называют "number_served", и ты заменяешь метод на численное поле. Именование — важная вещь.

Если ты не против, я буду ссылаться на эту тему, как на аргумент в спорах "Почему нельзя начинать учить программирование с Python."
__________________
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума   Ответить с цитированием
Старый 14.10.2018, 21:27   #7
Palomnik1096
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 76
Репутация: 16
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
В книге, между прочим не ошиблись.
А ты ошибся.

Смотри:
У него поле называется "odometer_reading", а метод — "read_odometer"

А у тебя они оба называют "number_served", и ты заменяешь метод на численное поле. Именование — важная вещь.

Если ты не против, я буду ссылаться на эту тему, как на аргумент в спорах "Почему нельзя начинать учить программирование с Python."
ссылайся, мне не жалко)) а начинал я с VBA и ассемблера 32 битного))) асм вещь)), пробовал С++, тоже ничего, мое личное мнение надо начинать с асма!

Да и спасибо за подсказку))) там надо было метод назвать set_number_served(), а слово SET пропустил))

По части Питона, как первого языка, не знаю, мне кажется он очень не плох!

Последний раз редактировалось Palomnik1096; 14.10.2018 в 21:32.
Palomnik1096 вне форума   Ответить с цитированием
Старый 14.10.2018, 22:51   #8
New man
Участник клуба
 
Регистрация: 24.01.2011
Сообщений: 750
Репутация: 241
По умолчанию

Цитата:
Сообщение от Palomnik1096 Посмотреть сообщение
мне кажется он очень не плох!
Не приучает управлять ресурсами (памятью, например).
Не показывает ошибки вроде той, которую ты допустил.

Для обучения нужен явно и строго типизированный язык.
__________________
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция в питоне. adolphina Помощь студентам 6 19.11.2016 12:23
Приложение на Питоне milkerbell Фриланс 0 24.07.2013 13:35
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24


05:35.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru