擅长:python、mysql、java
<p>我玩了一会儿,发现了这个解决方案:</p>
<pre class="lang-py prettyprint-override"><code>class DecoratorTest:
def __init__(self):
self._first_name = ['CHARLES', 'WILIAM', 'ENID']
self._last_name = ['DICKENS', 'SHAKESPEARE', 'BLYTON']
self._full_name = None
class designation(object):
def __init__(self, decorated, *args, **kwargs):
print(str(*args))
print(str(**kwargs))
self._decorated = decorated
def __call__(self, *args, **kwargs):
full_name = "MR" + self._decorated(self)
return full_name
@designation
def full_name(self):
if not DecoratorTest()._full_name:
full_name = ' '.join([random.choices(DecoratorTest()._first_name)[0], random.choices(DecoratorTest()._last_name)[0]])
return full_name
</code></pre>
<p>主要问题是,您使用内部装饰器类装饰外部方法,这导致了问题,外部方法中的<code>self</code>可能指向内部方法。我使用类名本身来指向正确的值</p>
<p>这只是一个快速的,它可能不是100%准确</p>
<p>你好,托马斯</p>