From 774718b2cd5e7157b8e5069b102bb42ef68870b1 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Mon, 15 Apr 2024 16:59:30 +0300 Subject: [PATCH] * 3.7_10 fix tests with SingletonMeta --- mod_oop/3.7_10_minesweeper.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/mod_oop/3.7_10_minesweeper.py b/mod_oop/3.7_10_minesweeper.py index dbc8fe6..804f928 100644 --- a/mod_oop/3.7_10_minesweeper.py +++ b/mod_oop/3.7_10_minesweeper.py @@ -5,14 +5,16 @@ Для начала в программе объявите класс GamePole, который будет создавать и управлять игровым полем. Объект этого класса должен формироваться командой: pole = GamePole(N, M, total_mines) -#>>> N, M, total_mines = 10, 10, 10 -#>>> pole = GamePole(N, M, total_mines) + +>>> SingletonMeta._instances = {} +>>> N, M, total_mines = 10, 10, 10 +>>> pole = GamePole(N, M, total_mines) И, так как поле в игре одно, то нужно контролировать создание только одного объекта класса GamePole (используйте паттерн Singleton, о котором мы с вами говорили, когда рассматривали магический метод __new__()). Объект pole должен иметь локальный приватный атрибут: __pole_cells - двумерный (вложенный) кортеж, размерами N x M элементов (N строк и M столбцов), состоящий из объектов класса Cell. -#>>> hasattr(pole, "_GamePole__pole_cells") +>>> hasattr(pole, "_GamePole__pole_cells") True Для доступа к этой коллекции объявите в классе GamePole объект-свойство (property): @@ -57,6 +59,7 @@ True Пример использования классов (эти строчки в программе писать не нужно): +>>> SingletonMeta._instances = {} >>> random.seed(5) >>> pole = GamePole(10, 20, 10) # создается поле размерами 10x20 с общим числом мин 10 >>> pole.init_pole() @@ -230,7 +233,15 @@ class GamePole(metaclass=SingletonMeta): print(self) +pole_game = GamePole(10, 8, 12) +pole_game.open_random(30) +pole_game.show_pole() +pole_game.open() +pole_game.show_pole() + + def tests(): + SingletonMeta._instances = {} code = ( b"a4{e~AV*O(6rF7(6!Nm(SgyAAke+gwb6mly3oGRyU~o$y3oEL(7w>I" @@ -270,17 +281,6 @@ def tests(): if __name__ == "__main__": - import sys - - if sys.argv[-1] == "doctest": - import doctest - - doctest.testmod() - elif sys.argv[-1] == "show": - pole_game = GamePole(10, 8, 12) - pole_game.open_random(30) - pole_game.show_pole() - pole_game.open() - pole_game.show_pole() - else: - tests() + import doctest + doctest.testmod() + tests()