Как использовать конструктор для создания объекта в Python - PullRequest
0 голосов
/ 29 апреля 2018

Это меня очень застряло. Мне нужно использовать класс, который я создал, чтобы создать объект в главном модуле. Однако, исходя из моего собственного опыта, мы должны создать объект main прежде, чем сможем вызывать функции из класса. Имя объекта, который мне нужно создать, будет называться (Customer1), и общая идея программы заключается в том, что Программа заказа для китайского ресторана Код выглядит следующим образом.

def Choose_dish(self):

    print('Please choose from the following items for a main dish:'
          'Sweet and Sour Pork, Sesame Chicken, or Shrimp Fried rice.')

    choice = input('Press 1 for Sweet and Sour, Press 2 for Sesame Chicken, or press 3 for Shrimp Fried rice.')

    if choice == 1:
        self._dish = 'sweet and sour'

    if choice ==2:
        self._dish = 'sesame chicken'

    if choice == 3:
        self._dish = 'shrimp fried rice'

Первый метод - это защищенный конструктор, который должен быть вызван, чтобы объект (Customer1) мог выбрать выбор основного блюда. Ниже приведен код, который я пытался в основном.

from Dinner_Combo import Dinner_combo
def main():
    print('Welcome to the restaurant')
    choice = input('please select 1 for regular meal, or select 2 for deluxe meal!')
    if int(choice) == 1:
        customer1 = Dinner_combo()

main()

обратите внимание, что имя созданного мной файла класса Python - "Dinner_Combo", а имя самого класса - "Dinner_combo"

1 Ответ

0 голосов
/ 19 мая 2018

Вы можете сделать что-то вроде этого:

class Dinner_combo(object):
    def __init__(self):
        self._dish = self.Choose_dish()

    def Choose_dish(self):
        print('Please choose from the following items for a main dish:'
              'Sweet and Sour Pork, Sesame Chicken, or Shrimp Fried rice.')
        choice = input('Press 1 for Sweet and Sour, Press 2 for Sesame Chicken, or press 3 for Shrimp Fried rice.')
        if choice == 1:
            return 'sweet and sour'
        elif choice == 2:
            return 'sesame chicken'
        elif choice == 3:
            return 'shrimp fried rice'

Вышеуказанное должно помочь вам достичь желаемого поведения в main, но я бы посоветовал вам пересмотреть свой подход: я обычно стараюсь избегать любых операций, которые могут привести к сбою в инициализаторе.


Initializer (__init__(self, ...)) - это специальный метод класса, который вызывается «автоматически» после создания объекта. Объект фактически уже существует, и инициализатор просто инициализирует его. Обычно вы не вызываете его явно, если не вызываете его для инициализации родительского класса.

С https://docs.python.org/2/tutorial/classes.html#class-objects:

Операция создания экземпляра («вызова» объекта класса) создает пустой объект. Многие классы любят создавать объекты с экземплярами, настроенными на конкретное начальное состояние. Поэтому класс может определять специальный метод с именем __init__(), например:

def __init__(self):
    self.data = []

Когда класс определяет метод __init__(), создание экземпляра класса автоматически вызывает __init__() для вновь созданного экземпляра класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...