【发布时间】:2018-04-17 04:41:56
【问题描述】:
是否可以修改一个类以使某个方法装饰器可用,而不必显式导入它,也不必为其添加前缀(@something.some_decorator):
class SomeClass:
@some_decorator
def some_method(self):
pass
我认为使用类装饰器是不可能的,因为应用得太晚了。似乎更有希望的选项是使用元类,但我不确定如何,我的猜测是我必须将 some_decorator 引入 SomeClass 的命名空间。
感谢@MartijnPieters 指出staticmethod 和classmethod 是内置的。我原以为他们会成为type 机器的一部分。
需要明确的是,我没有任何明确的用例,我只是好奇这是否可能。
附录,现在问题已经得到解答。我不只是在本地导入或定义装饰器的最初原因是,我已经定义了一个装饰器,该装饰器只有在对象上初始化某个容器属性时才起作用,并且我正在寻找一种方法来强制执行它装饰器的可用性。我最终检查了该属性是否存在,以及是否没有在装饰器中对其进行初始化,这很可能是较小的邪恶。
【问题讨论】:
-
感谢更新,问题现在比以前更清楚了。
标签: python python-3.x python-decorators metaclass