Можно ли вернуть значения словаря (список объектов) и вызвать их функцию __str__ вместо вывода адреса их памяти? - PullRequest
0 голосов
/ 23 сентября 2019

Эй, название вопроса может быть немного запутанным.Итак, в основном я хочу напечатать словарь с ключами и его значениями, поэтому я знаю, что нужно вызывать dictionary.items (), но я хочу, чтобы он распечатывал, используя функцию объекта str вместо печати адреса памяти.

Мой объект игрока

class Player():

    def __init__(self, id, name, position):
        self.player_id = id
        self.name = name

    def __str__(self):
        return self.name

Итак, у меня есть словарь -

depth_chart = {}

, в который я вставляю объекты игрока в виде списка.

def addPlayer(player, position):
    # Function to add player to depth chart.

    if position not in depth_chart:
        depth_chart[position] = []
        depth_chart[position].append(player)

    else:
        depth_chart[position].append(player)

Так что в конечном итоге у меня может появиться что-то вроде этого -

depth_chart = {
   'shooting_guard': [PlayerObject1, PlayerObject2],

   'center': [PlayerObject3],

   'point_guard': [PlayerObject4]

}

Теперь вот моя проблема, если я вызываю глубину_чарт.items (), я хочу, чтобы он возвращал мне что-то вроде

[('shooting_guard', ['John', 'Joseph'] ), ('center', ['Alex']), ('point_guard': ['Sean'] ]

Но сейчас он просто возвращает мне адрес памяти объектов Player.Есть ли способ вызвать функцию str или другой метод для вывода имен объектов проигрывателя?У меня есть функция, которую я могу сделать, чтобы она выглядела так, как я хочу, но я не уверен, есть ли более простой способ?Как выглядит эта функция -


def getFullDepthChart():
    # Function to print out all the positions in the depth chart

    all_players = []
    for items in depth_chart.items():
        temp = []
        position = items[0]
        player_array = items[1]
        for players in player_array:
            temp.append(players.name)
        all_players.append((position, temp))
    return all_players

Ответы [ 2 ]

1 голос
/ 23 сентября 2019
def getFullDepthChart():
    # Function to return all positions in the depth chart

    all_players = [(position,
                    [player.name for player in players])
                    for pos, players in depth_chart.items()]

    return all_players
1 голос
/ 23 сентября 2019

Вы можете реализовать __repr__, чтобы вернуть имя игрока:

class Player:
    def __repr__(self):
        return self.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...