Как мне получить доступ к атрибуту одного класса из __init__ другого? - PullRequest
0 голосов
/ 29 мая 2020

Я работаю над задачей OOP, поскольку мы только что с ней познакомились. Мы должны создать два класса: Animal и Desert. Они определили для нас множество атрибутов и методов, которые должны иметь эти классы.

Desert содержит атрибут Grid, который некоторые Animal объекты должны быть распределены по. Объекты Animal представлены 'A' там, где они присутствуют в сетке, но также сохраняют свою позицию локально со своими атрибутами Across и Down.

В __init__ из Animal класса, мы должны выбрать случайную позицию на Grid, чтобы разместить животное. Это означает установку атрибутов Across и Down на случайное значение, а также изменение Grid для отображения 'A' в этом месте.

Я не уверен, как я могу go получить доступ к Grid из объектов Animal. Вот соответствующий код, комментарии относятся к различным пунктам задачи:

class Animal(Desert):

  # Constructor
  def __init__(self):

    # Generate a pair of random numbers between 0 and 39.
    rand_num1 = randint(0, 39)
    rand_num2 = randint(0, 39)

    # Place an animal at that random position.
    self.Across = rand_num1
    self.Down = rand_num2
    # HERE IS WHERE I WOULD LIKE TO MODIFY THE GRID ATTRIBUTE OF DESERT

    # Initialise the animal's score to 0.
    self.Score = 0
class Desert:

  # Constructor
  def __init__(self):


    # attributes:
    self.Grid = []
    self.StepCounter = 0
    self.AnimalList = []
    self.NumberofAnimals = 0

    # Initialises an empty grid
    self.Grid = [['ロ' * 40] * 40]

    # Creates 5 animal objects which are added to the AnimalList
    for _ in range(5):
      self.AnimalList.append(Animal())

1 Ответ

2 голосов
/ 29 мая 2020

Возможно, вы захотите пересмотреть отношения между Animal и Desert. Если вы посмотрите на начало Пустыни, это должно дать вам некоторое представление. У Desert есть список животных, который имеет отношение к Animal. Вы можете прочитать это так: в пустыне есть животное, а не в животном - это пустыня. Из этого отношения моделирования вы можете сделать что-то вроде этого для доступа к сетке Пустыни.

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

 #Animal __init__
 # Constructor
   def __init__(self, grid):
      ...


 # Desert __init__
 ....
 # Creates 5 animal objects which are added to the AnimalList
 for _ in range(5):
   self.AnimalList.append(Animal(self.Grid))

Также удалите наследование от Desert for Animal.

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