Python プロジェクトでログの目的で使用しているメタクラスを作成しました。すべてのクラスが自動的にすべてのアクティビティを記録します。唯一の問題は、すべてのファイルにアクセスして追加する必要がないことです。
__metaclass__ = myMeta
最上位フォルダーにメタクラスを設定して、その下にあるすべてのファイルがそのメタクラスを使用する方法はありますか?
Python プロジェクトでログの目的で使用しているメタクラスを作成しました。すべてのクラスが自動的にすべてのアクティビティを記録します。唯一の問題は、すべてのファイルにアクセスして追加する必要がないことです。
__metaclass__ = myMeta
最上位フォルダーにメタクラスを設定して、その下にあるすべてのファイルがそのメタクラスを使用する方法はありますか?
ここに簡単なテクニックがあります。サブクラスの属性を使用して、クラス自体をサブクラス化するだけです。このプロセスは自動化できます。__metaclass__
ユーティリティ.py
class A(object):
def __init__(self, first, second):
self.first = first
self.second = second
def __str__(self):
return '{} {}'.format(self.first, self.second)
main.py
from datetime import datetime
from util import A
def meta(*args):
cls = type(*args)
setattr(cls, 'created', datetime.now().ctime())
return cls
try:
print(A.created)
except AttributeError as e:
print(e)
class A(A):
__metaclass__ = meta
print(A.created, str(A('Michael', 'Jackson')))
テスト;
$ python main.py
type object 'A' has no attribute 'created'
('Wed Mar 9 22:58:16 2016', 'Michael Jackson')