* 3.7_10 fix tests with SingletonMeta
This commit is contained in:
parent
4e887c7782
commit
774718b2cd
@ -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*<sWl(QyWhgN)EFdy4EFdv3DGG2hAUz;QVQpnlZ){~KF)%D3GB7M4F)%3#VRLh3a&#b"
|
||||
+ b"RWGHYkDIh&PAZcVMa55<@AR^I$(7w>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()
|
||||
|
Loading…
Reference in New Issue
Block a user