Попытка инициализировать члены в классе, вызвав переменную из внешней функции

avatar
charles.daniel94
9 августа 2021 в 04:28
50
2
0

Здравствуйте, я работаю над заданием и пытаюсь вызвать значение, которое я ввел в функцию перед созданием класса. Что я делаю не так. Или это вообще возможно.

def main():
    size = int(input()) 

class Ant:

    def __init__(self):
        self._size = (size??) 

    def get_size(self):
        return self._size

main()

ant_1 = Ant()

print(ant_1.get_size()) 

Источник
Michael Butscher
9 августа 2021 в 04:30
0

Переменная size является локальной для функции main и исчезает в конце выполнения. Объявите его явно как "глобальный".

Guy
9 августа 2021 в 04:32
0

Почему бы вам просто не добавить size к Ant и отправить его как параметр к __init__?

juanpa.arrivillaga
9 августа 2021 в 04:52
2

@MichaelButscher, еще лучше, верните значение явно из main.

Ответы (2)

avatar
David Culbreth
9 августа 2021 в 04:35
1

вы можете добавить size в свой конструктор Ant:

class Ant:

    def __init__(self, size):
        self._size = size

    def get_size(self):
        return self._size

тогда ваш main будет выглядеть примерно так:

def main():
    size = int(input())
    my_ant = Ant(size)
    print(my_ant.get_size()) 
avatar
user15801675
9 августа 2021 в 04:34
1

Как упомянул @Michael, size — это локальная переменная в рамках функции main. Вам нужно определить его global для доступа к нему в любом месте:

def main():
    global size
    size = int(input()) 

Однако переменные global неверны, поэтому вы можете вернуть значение, добавить параметр size в __init__() и передать возвращенное значение:


def main():
    size = int(input()) 
    return size
class Ant:

    def __init__(self,size):
        self._size = (size) 

    def get_size(self):
        return self._size

size=main()
ant_1 = Ant(size)
print(ant_1.get_size()) 

charles.daniel94
9 августа 2021 в 13:00
0

Так что мы еще не изучили глобальную вещь, поэтому я сомневаюсь, что смогу ее использовать. Спасибо за ваш ответ. Но я все еще немного запутался, потому что на самом деле это несколько значений, таких как позиция и ориентация, которые должны быть в main. И эти входные данные должны быть каким-то образом вызваны для инициализации в классе муравья. Не знаю как.