Как я могу отозвать функцию open_restaurant()?

#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. Я добавил ответ для обоих сценариев