* 3.7_10 fix tests with SingletonMeta
This commit is contained in:
parent
4e887c7782
commit
774718b2cd
@ -5,14 +5,16 @@
|
|||||||
|
|
||||||
Для начала в программе объявите класс GamePole, который будет создавать и управлять игровым полем. Объект этого класса должен формироваться командой:
|
Для начала в программе объявите класс GamePole, который будет создавать и управлять игровым полем. Объект этого класса должен формироваться командой:
|
||||||
pole = GamePole(N, M, total_mines)
|
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__()).
|
И, так как поле в игре одно, то нужно контролировать создание только одного объекта класса GamePole (используйте паттерн Singleton, о котором мы с вами говорили, когда рассматривали магический метод __new__()).
|
||||||
|
|
||||||
Объект pole должен иметь локальный приватный атрибут:
|
Объект pole должен иметь локальный приватный атрибут:
|
||||||
__pole_cells - двумерный (вложенный) кортеж, размерами N x M элементов (N строк и M столбцов), состоящий из объектов класса Cell.
|
__pole_cells - двумерный (вложенный) кортеж, размерами N x M элементов (N строк и M столбцов), состоящий из объектов класса Cell.
|
||||||
#>>> hasattr(pole, "_GamePole__pole_cells")
|
>>> hasattr(pole, "_GamePole__pole_cells")
|
||||||
True
|
True
|
||||||
|
|
||||||
Для доступа к этой коллекции объявите в классе GamePole объект-свойство (property):
|
Для доступа к этой коллекции объявите в классе GamePole объект-свойство (property):
|
||||||
@ -57,6 +59,7 @@ True
|
|||||||
|
|
||||||
Пример использования классов (эти строчки в программе писать не нужно):
|
Пример использования классов (эти строчки в программе писать не нужно):
|
||||||
|
|
||||||
|
>>> SingletonMeta._instances = {}
|
||||||
>>> random.seed(5)
|
>>> random.seed(5)
|
||||||
>>> pole = GamePole(10, 20, 10) # создается поле размерами 10x20 с общим числом мин 10
|
>>> pole = GamePole(10, 20, 10) # создается поле размерами 10x20 с общим числом мин 10
|
||||||
>>> pole.init_pole()
|
>>> pole.init_pole()
|
||||||
@ -230,7 +233,15 @@ class GamePole(metaclass=SingletonMeta):
|
|||||||
print(self)
|
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():
|
def tests():
|
||||||
|
SingletonMeta._instances = {}
|
||||||
code = (
|
code = (
|
||||||
b"a4{e~AV*<sWl(QyWhgN)EFdy4EFdv3DGG2hAUz;QVQpnlZ){~KF)%D3GB7M4F)%3#VRLh3a&#b"
|
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"
|
+ 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__":
|
if __name__ == "__main__":
|
||||||
import sys
|
import doctest
|
||||||
|
doctest.testmod()
|
||||||
if sys.argv[-1] == "doctest":
|
tests()
|
||||||
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()
|
|
||||||
|
Loading…
Reference in New Issue
Block a user