9

Python プロジェクトでログの目的で使用しているメタクラスを作成しました。すべてのクラスが自動的にすべてのアクティビティを記録します。唯一の問題は、すべてのファイルにアクセスして追加する必要がないことです。

__metaclass__ = myMeta

最上位フォルダーにメタクラスを設定して、その下にあるすべてのファイルがそのメタクラスを使用する方法はありますか?

4

2 に答える 2

1

ここに簡単なテクニックがあります。サブクラスの属性を使用して、クラス自体をサブクラス化するだけです。このプロセスは自動化できます。__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')
于 2016-03-09T17:31:27.080 に答える