Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2018, 19:20   #1
Palomnik1096
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 83
По умолчанию Класс в питоне

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

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

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, 19:27   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

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

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

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, 19:31   #3
Palomnik1096
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 83
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
Ты вот в этой строке заменил функцию на число.
Соответственно, число вызывать нельзя.
Рекомендую переименовать метод, например, на print_number_served.
Код:
self.number_served = 0
Блин, так в книге написано)))
Palomnik1096 вне форума Ответить с цитированием
Старый 14.10.2018, 19:34   #4
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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