Я пытаюсь выполнить чистый объект Objective-C в Python и нашел this answer в аналогичном вопросе. Я скопировал код ниже:Как узнать, откуда вызывается метод?
categories.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)
Но я не хочу тратить пространство имен. Используя этот `категории, остается переменной как объект 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
предоставил мне полезную информацию. Но я не мог сделать это сам.
Благодарим за сообщение. Я изменю свой план и реализую их более питоническим способом! – user2100702