Есть ли способ создать несколько объектов с общими именами для каждой функции в python 3.8.6?

Итак, для контекста: я пытаюсь создать простую шахматную программу на питоне с помощью pygame (2.0.0). Поскольку я не хочу создавать каждую из 64 плиток вручную, я ищу способ создать их с помощью функции. Поскольку в шахматах плитки имеют имена от a1 до h8 (файлы и ранги), я хочу, чтобы объекты имели такие имена (a1, a2,...). Класс плитки до сих пор очень прост:

class tile: 

    def __init__(self):
        self.piece = None

Тогда я сделал два списка: один для файлов и один для рангов. Затем два цикла for (один в другом), чтобы для каждой отдельной комбинации создавался тайл-объект:

files = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
ranks = ['1', '2', '3', '4', '5', '6', '7', '8']

for f in files:
    for r in ranks:
        f + r = tile()

Теперь моя проблема: python не позволяет этого ;( Я хочу создать 64 объекта плитки с именами от a1 до h8. Есть ли способ для этого?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
217
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Хотя это технически возможно, я бы настоятельно не советовал динамически манипулировать областями переменных. "Предполагаемый" способ сделать это - использовать словарь:

files = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
ranks = ['1', '2', '3', '4', '5', '6', '7', '8']

tiles = {}

for f in files:
    for r in ranks:
        tiles[f + r] = tile()

Затем вы можете получить доступ, например. плитка от E4 до tiles["e4"].

Было бы разумно хранить эти плитки в dict:

files = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
ranks = ['1', '2', '3', '4', '5', '6', '7', '8']
tiles = {f'{file}{rank}': tile() for file in files for rank in ranks}

Другой способ — создать класс Chessboard:

class Chessboard:
    def __init__(self, files, ranks):
        for file in files:
            for rank in ranks:
                setattr(self, f'{file}{rank}', tile())
                
                
chessboard = Chessboard(files, ranks)

Не могли бы вы объяснить, как работает вторая часть? Я не понимаю, как setattr() работает с (self, '{file}{rank}', tile()). Также: что делает '{file}{rank}'?

Einliterflasche 22.12.2020 19:55

Ну, он делает то, что следует из его названия. Он устанавливает атрибуты. В этом случае атрибуты класса Chessboard от имен f'{file}{rank}' к значениям tile().

mapf 22.12.2020 20:23

означает ли это, что f'{file}{rank}' становится объектом класса тайлов? если да, то как это возможно внутри такого объекта, как шахматная доска? Доступен ли новый объект только в классе шахматной доски? А что делает f''?

Einliterflasche 22.12.2020 20:31

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

mapf 22.12.2020 20:51

Другие вопросы по теме