[PYTHON] Je souhaite créer un type d'implémentation pouvant être branché

Lors de la création d'un script qui émet un jugement selon les règles

Je voulais pouvoir ajouter des règles, alors je l'ai créé

Rendu possible l'exécution en créant une classe qui hérite de Person dans les classes

.
├── Main.py
└── classes
    ├── Person.py
    ├── Taro.py
    └── Tom.py

Main.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

# from os.path import join, relpath, splitext
from os import path
from glob import glob
import re
import sys

def main():
    """ Run from Here. """
    dir = "classes"
    exception_file = ["__pycache__", "Person.py"]
    extention = ".py"
    reg = re.compile('.+\\' +extention)

    sys.path.append(dir) #Ajouter un chemin
    files = [path.relpath(x, dir) for x in glob(path.join(dir, '*'))]
    files = list(set(files) - set(exception_file))

    objs = []
    for x in files:
        if reg.match(x):
            name = x.replace(".py", "")
            #Charger la classe ici
            m = __import__(name, globals(), locals(), [name], 0 )
            o = eval("m."+name+"()")
            objs.append(o)

    for obj in objs:
        obj.say()

if __name__=="__main__":
    main()

Person.py


from abc import ABCMeta
from abc import abstractmethod

class Person(metaclass=ABCMeta):

    @abstractmethod
    def say(self):
        raise NotImplementedError

Taro.py


from Person import Person

class Taro(Person):
    def say(self):
        print("Hello, this is Taro.")

Tom.py


from Person import Person

class Tom(Person):
    def say(self):
        print("Hello, this is Tom.")

out


$ python Main.py 
Hello, this is Taro.
Hello, this is Tom.

Ce que je ne comprends pas

Est-il dangereux d'implémenter un script qui peut être ajouté sans réécrire le programme?

Existe-t-il une façon plus intelligente d'appeler?

s'il vous plaît dites-moi

Recommended Posts

Je souhaite créer un type d'implémentation pouvant être branché
J'ai essayé de créer un linebot (implémentation)
Je souhaite créer facilement un modèle de bruit
Je veux créer une fenêtre avec Python
Je souhaite créer manuellement une légende avec matplotlib
Je veux créer un Dockerfile pour le moment.
Je veux imprimer dans la notation d'inclusion
J'ai essayé de créer un linebot (préparation)
Je veux créer un environnement Python
Qiskit: Je veux créer un circuit qui crée des états arbitraires! !!
Je veux créer un système pour éviter d'oublier de serrer la clé 1
Je veux créer un fichier pip et le refléter dans le menu fixe
Je souhaite créer un service d'apprentissage automatique sans programmation! API Web
Je veux faire de matplotlib un thème sombre
Je veux INSÉRER un DataFrame dans MSSQL
Je veux faire un jeu avec Python
Si vous souhaitez créer Word Cloud.
Je ne veux pas passer un test de codage
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Development] (2/3)
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Execution] (3/3)
J'ai écrit un script pour télécharger un plug-in WordPress
Je veux trouver facilement une délicieuse boutique
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Setup] (1/3)
Je veux écrire dans un fichier avec Python
Je souhaite créer un service d'apprentissage automatique sans programmation!
Je souhaite télécharger une application Django sur heroku
Je souhaite créer une application WEB en utilisant les données de League of Legends ①
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
100 coups sur le traitement d'image !! (021-030) Je veux faire une pause ...
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Je veux faire la transition avec un bouton sur le ballon
Comment créer un sous-menu avec le plug-in [Blender]
Créer un plugin pour exécuter Python Doctest sur Vim (2)
Créez un plug-in pour exécuter Python Doctest avec Vim (1)
Je veux trouver un package populaire sur PyPi
Je souhaite créer facilement un environnement de développement basé sur un modèle
Je veux travailler avec un robot en python.
Je veux diviser une chaîne de caractères avec hiragana
Je souhaite installer un package de Php Redis
[Python] Je veux faire d'une liste imbriquée un taple
Je souhaite envoyer automatiquement un e-mail de création d'entreprise
Je veux faire fonctionner un ordinateur quantique avec Python
Je veux lier une variable locale avec lambda
Je veux un générateur de mox
Créer un plugin Wox (Python)
Je veux résoudre SUDOKU
Je veux un générateur mox (2)
Je souhaite créer une base de données de déjeuners [EP1] Django pour la première fois
Je souhaite créer une base de données de déjeuner [EP1-4] Django pour la première fois
Je veux créer un éditeur de blog avec l'administrateur de django
Je veux démarrer un environnement Jupyter avec une seule commande
[Python] Je souhaite obtenir un ensemble commun entre numpy
Je veux démarrer beaucoup de processus à partir de python
Je veux faire une macro de clic avec pyautogui (désir)
Je veux générer automatiquement un nom de groupe de metal moderne
J'ai créé un outil pour créer un nuage de mots à partir de wikipedia
Je veux faire une macro de clic avec pyautogui (Outlook)