From 581eb7ce83ffb9bce13e594f23199f8126b717ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20J=C3=A4ckle?= Date: Thu, 29 Jun 2023 17:10:46 +0200 Subject: [PATCH] Singleton --- game.py | 24 ++++++++++++++++++++++++ main.py | 28 ++++++++++++++++++++++++++++ singleton.py | 11 +++++++++++ test.py | 8 ++++++++ 4 files changed, 71 insertions(+) create mode 100644 game.py create mode 100644 main.py create mode 100644 singleton.py create mode 100644 test.py diff --git a/game.py b/game.py new file mode 100644 index 0000000..8f1e2f4 --- /dev/null +++ b/game.py @@ -0,0 +1,24 @@ +'Beispielcode für einen Singelton' +from singleton import Singleton + + +class Game(metaclass=Singleton): + 'Beispielklasse für einen Singelton. Kann nur seinen Namen merken.' + _name = 'New unnamed Game' + + def __init__(self): + pass + + def set_name(self, name) -> None: + 'Setzt Namen vom Spiel' + self._name: str = name + + def __str__(self) -> str: + return self.get_name() + + def __repr__(self) -> str: + return f'game: {self.get_name()}' + + def get_name(self) -> str: + 'Gibt Namen vom Spiel' + return self._name diff --git a/main.py b/main.py new file mode 100644 index 0000000..c1f1aba --- /dev/null +++ b/main.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +# -*- coding: UTF-8 -*- +# +# main.py +# +# Copyright 2023 Beat Jäckle +'Beispiel um den Einsatz von einem Singleton zu zeigen.' +from test import print_new_game +from game import Game + + +def main(): + ''' + Erstellt ein Game x und ruft unabhängig eine Funktion auf, + welche ein neues Game y erstellt. + Der Name vom neuen Game ist der Name des Games x. + ''' + x_game = Game() + print(x_game) + x_game.set_name('Spiel X') + print(x_game) + print_new_game() + return 0 + + +if __name__ == '__main__': + import sys + sys.exit(main()) diff --git a/singleton.py b/singleton.py new file mode 100644 index 0000000..d06c0bb --- /dev/null +++ b/singleton.py @@ -0,0 +1,11 @@ +'Demo Singleton Code von https://stackoverflow.com/a/6798042/9773263' + + +class Singleton(type): + 'Singelton von agf, Lizenz: CC BY-SA 2.5' + _instances = {} + + def __call__(cls, *args, **kwargs): + if cls not in cls._instances: + cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) + return cls._instances[cls] diff --git a/test.py b/test.py new file mode 100644 index 0000000..9793909 --- /dev/null +++ b/test.py @@ -0,0 +1,8 @@ +'Erstellt ein neues Game. Wie wird es wohl heissen?' +from game import Game + + +def print_new_game(): + 'Erstellt ein neues Game und printet den Namen.' + y_game = Game() + print(y_game)