Help us understand the problem. What is going on with this article?

プラグインできるタイプの実装が作りたい

More than 3 years have passed since last update.

ルールに従い判定を行うスクリプトを作成時

ルールは追加できるようにしたかったので作成

Personを継承したクラスを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) # path の追加 
    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", "")
            # ここでクラスの読み込み
            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.

分からない点

プログラムを書き換えること無くスクリプトを追加できる実装は危険なのか

もっとスマートにかける方法ないのか

教えて下さい

him0net
ペーペーです。 ボコスコに叩いてください 叩いていただいたらたんこぶの分身長伸びるので
http://him0.net
freee
スモールビジネスのバックオフィス業務をテクノロジーで自動化し、日本のスモールビジネスを元気にする
http://www.freee.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away