私はPythonでObjective-Cのカテゴリをクリーンに実装しようとしていますが、私の同様の質問に対するこの答えを見つけました。以下のコードをコピーしました:
カテゴリ.py
class category(object):
def __init__(self, mainModule, override = True):
self.mainModule = mainModule
self.override = override
def __call__(self, function):
if self.override or function.__name__ not in dir(self.mainModule):
setattr(self.mainModule, function.__name__, function)
しかし、私は名前空間を無駄にしたくありません。この`categories'を使用することにより、以下のようなNoneTypeオブジェクトとして変数が残ります。
>>> from categories import category
>>> class Test(object):
... pass
...
>>> @category(Test)
... def foobar(self, msg):
... print msg
...
>>> test = Test()
>>> test.foobar('hello world')
hello world
>>> type(foobar)
<type 'NoneType'>
>>>
以下のようにしたい
>>> from categories import category
>>> class Test(object):
... pass
...
>>> @category(Test)
... def foobar(self, msg):
... print msg
...
>>> test = Test()
>>> test.foobar('hello world')
hello world
>>> type(foobar)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foobar' is not defined
>>>
以下のように自動的に削除する方法はありますか?
def __call__(self, function):
if self.override or function.__name__ not in dir(self.mainModule):
setattr(self.mainModule, function.__name__, function)
del(somewhere.function.__name__)
sys._getframe
私はそれが私にいくつかの有用な情報を与えることを発見しました。しかし、私は自分でそれを作ることができませんでした。