擅长:python、mysql、java
<p>对于您想要做的事情,没有完美的解决方案,但是有一些不同的方法可能已经足够好了。你知道吗</p>
<p>从最简单的方法开始,在子类中使用class方法之前,可以为长类指定一个较短的名称:</p>
<pre><code>class IDontWantToDoThisButNameHasToBeThisLong(object):
...
A = IDontWantToDoThisButNameHasToBeThisLong
# later code can use A.whatever()
</code></pre>
<p>另一种选择是将decorator从具有长名称的类中移出,这样以后的代码将直接将其引用为全局方法,而不是类方法。这需要稍微重新设计一下(如果您希望有多个不同的<code>a</code>列表可以通过同一个通过不同类调用的装饰器进行访问,那么这可能会破坏一些东西):</p>
<pre><code>class IDontWantToDoThisButNameHasToBeThisLong(object):
a = []
def eat(func):
IDontWantToDoThisButNameHasToBeThisLong.a.append(func) # only need to use the name once
return func # I suspect you want this too (a decorator should return a callable)
# later code can use @eat as a decorator, without referring to the long class name
</code></pre>
<p>这两种方法的混合可能是保持现有类方法定义不变,但为绑定方法创建另一个更易于访问的全局名称:</p>
<pre><code>eat = IDontWantToDoThisButNameHasToBeThisLong.eat
</code></pre>
<p>最后一种可能的方法是使用更高级的元类编程,或者(如果您使用的是python3.6)<code>__init_subclass__</code>或类似的方法,以实现您心目中的目标,而不需要使用类方法作为装饰器。我不打算包含这方面的代码,因为实现这一点的最佳方法可能取决于设计的更多细节,而不是示例中显示的细节。你知道吗</p>