Невозможно распечатать строку из возвращенного класса - PullRequest
0 голосов
/ 08 мая 2020

Итак, я хотел разработать базовый c код, но застрял здесь. Я знаю, что должен вызвать функцию в классе Bootcamp, но не знаю как. Я хочу напечатать, что находится в классе Bootcamp, когда ввод задан как bootcamp. Помощь приветствуется.

class match_start:
    def choose_land(self):
        print('You are in the plane. CHoose where to land')

        land_area = input('->')
        if land_area == 'bootcamp':
            return 'Bootcamp'

        elif land_area == 'docks':
            return 'Docks'

        else:
            print('landed with bots')


class Bootcamp:
    def bootcamp(self):
        print ('Bootcamp it is')

class Docks:
    def docks(self):
        print('Docks it is')

x = match_start()
x.choose_land()

Output --
You are in the plane. CHoose where to land
->bootcamp
PS C:\Users\User\Downloads\New folder (2)\Practice>    

PS - Я новичок в кодировании и учусь на Учиться Python на сложном пути от Zed Shaw , так что, пожалуйста, предложите что-нибудь улучшить мое кодирование. Также это мой первый вопрос по stackoverflow, и я также избегаю глупых ссылок на pubg.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Я внес некоторые изменения в ваш код и использовал базовое c наследование для достижения вашей цели.

Надеюсь, это то, что вы ищете! Вы должны добавить столько местоположений, сколько хотите в классе LandArea, и сослаться на них в дочернем классе Start_PubG.

class LandArea:
    def bootcamp(self):
        print ('You are landed in Bootcamp!')

    def docks(self):
        print('You are landed in Docks!')

class Start_PubG(LandArea):
    def choose_land(self):
        print('You are in the plane. Choose where to land!')
        land_area = input('->')
        if land_area.lower() == 'bootcamp':
            super().bootcamp()
        elif land_area.lower() == 'docks':
            super().docks()
        else:
            print('Landed with bots')

obj = Start_PubG()
obj.choose_land()

***** Добавлено после вашего комментария: ******

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

class Bootcamp:
    def bootcamp(self):
        print ('You are landed in Bootcamp!')

class Docks:
    def docks(self):
        print('You are landed in Docks!')

class Start_PubG(Bootcamp, Docks):
    def choose_land(self):
        print('You are in the plane. Choose where to land!')

        land_area = input('->')
        if land_area.lower() == 'bootcamp':
            super().bootcamp()
        elif land_area.lower() == 'docks':
            super().docks()
        else:
            print('Landed with bots')

obj = Start_PubG()
obj.choose_land()

Я также предполагаю, что вы хотели бы преобразовать ввод пользователя в ссылку на объект Python. В таком случае вы должны использовать функцию eval () для достижения своей цели. Ниже приведен подход к тому же. Но убедитесь, что ввод, предоставленный пользователем, чувствителен к регистру и не поврежден с именами классов, поскольку строки напрямую преобразуются в объекты python и вызываются, поэтому, когда вызывается несуществующий объект python, этот код выдает ошибку . [В отличие от предыдущих подходов, этот подход не может быть обработан без учета регистра]


class Bootcamp:
    def bootcamp(self):
        print ('You are landed in Bootcamp!')

class Docks:
    def docks(self):
        print('You are landed in Docks!')

class Start_PubG(Bootcamp, Docks):
    def choose_land(self):
        print('You are in the plane. Choose where to land!')

        land_area = input('->')
        if land_area == 'Bootcamp':
            obj_ref = eval(land_area)
            obj_ref().bootcamp()
        elif land_area == 'Docks':
            obj_ref = eval(land_area)
            obj_ref().docks()
        else:
            print('Landed with bots')

obj = Start_PubG()
obj.choose_land()
0 голосов
/ 08 мая 2020

Итак, похоже, вы пытаетесь сделать сразу несколько вещей:

сначала, чтобы распечатать выбранную строку, вам просто нужно обработать ее в функции print, простейшей версии этот код будет примерно таким (без дополнительных классов):

class match_start:
    def choose_land(self):
        print('You are in the plane. CHoose where to land')

        land_area = input('->')
        if land_area == 'bootcamp':
            print('Bootcamp it is')

        elif land_area == 'docks':
            print('Docks it is')
        else:
            print('landed with bots')

Похоже, вы пытались использовать класс для каждого пункта назначения, что немного сбивает с толку для базовых функций c вроде печать, чтобы заставить его работать там, вам нужно сначала создать экземпляр класса, а затем вызвать его функцию определения местоположения, я не рекомендую это, но в качестве примера у вас будет:

class match_start:
    def choose_land(self):
        print('You are in the plane. CHoose where to land')

        land_area = input('->')
        destination = Destination(land_area)
        destination.print_message()

class Destination(object):

    def __init__(self, dest_name):
        self.dest_name = dest_name
    def print_message(self):
        print (self.dest_name' + it is')

Попробуйте познакомиться с потоком, используя только функции, и тогда классы будут намного проще для понимания.

...