#python #function #class
#python #функция #класс
Вопрос:
Мне нужно отозвать функцию в классе. Я попытался ввести имя функции, но получил ошибку: NameError: name 'open_restaurant' is not defined
class Restaurant():
"""описание ресторана"""
def __init__(self, restaurant_name, cuisine_type):
"""Инициализирует атрибуты restaurant_name и cuisine_type."""
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
def describe_restaurant(self):
print(self.restaurant_name.title())
print(self.cuisine_type.title())
def open_restaurant():
print("Restaurant is open now!")
class Restaurant():
restaurant = Restaurant("Amarcord", "Italian")
print("Today I will eat in " restaurant.restaurant_name ".")
print(restaurant.restaurant_name " is an " restaurant.cuisine_type ".")
open_restaurant()
print("nToday I will eat in " restaurant.restaurant_name ", it" " is an "
restaurant.cuisine_type ".")
Комментарии:
1. Что значит отозвать функцию? Вы хотите удалить ее?
2. Показать обратную трассировку
3. Проверьте свою идентификацию. Python — чувствительный к пробелам язык, похоже, ваша идентификация может скрывать от вас вашу собственную ошибку. И размещенный вами здесь отступ неверен.
4. я хочу ее распечатать
5. Если
open_restaurant
определено в теле класса, оно не будет видно за пределами класса. Однако,__init__
должно быть, и сигнализировать о пустом классе вам нужноpass
. С этим кодом много проблем, но трудно сказать, какие, пока вы не исправите свой отступ.
Ответ №1:
Этот код сбивает меня с толку. Почему вы переопределяете Restaurant
? Это должно сработать:
class Restaurant:
"""описание ресторана"""
def __init__(self, restaurant_name, cuisine_type):
"""Инициализирует атрибуты restaurant_name и cuisine_type."""
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
def describe_restaurant(self):
print(self.restaurant_name.title())
print(self.cuisine_type.title())
def open_restaurant(self):
print("Restaurant is open now!")
Мы определили класс. Давайте создадим ее экземпляр:
r = Restaurant('x', 'y')
Теперь давайте вызовем определенный метод:
r.open_restaurant() # Restaurant is open now!
И наоборот, если вы хотите вызвать open_restaurant()
без создания экземпляра класса, вы можете определить @staticmethod
:
class Restaurant:
"""описание ресторана"""
def __init__(self, restaurant_name, cuisine_type):
"""Инициализирует атрибуты restaurant_name и cuisine_type."""
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
def describe_restaurant(self):
print(self.restaurant_name.title())
print(self.cuisine_type.title())
@staticmethod
def open_restaurant():
print("Restaurant is open now!")
И тогда вы можете просто вызвать ее:
open_restaurant() # Restaurant is open now!
Комментарии:
1. Не будет работать.
open_restaurant
не является staticmethod и не принимаетself
в качестве параметра. Учитывая, что с кодом операционной системы уже есть множество проблем, я сомневаюсь, чтоopen_restaurant
это преднамеренный метод.2. Из-за этого углубления трудно понять, чего он хочет
3. Правильно. Поэтому вам, скорее всего, следует воздержаться от предоставления ответа до тех пор, пока вы не узнаете, чего они на самом деле хотят.
4. Я добавил ответ для обоих сценариев