擅长:python、mysql、java
<p>看起来您混淆了术语<code>attribute</code>和<code>property</code>;您不能在类定义本身中使用<code>self</code>,它只对方法可用。你知道吗</p>
<p>我想你在找<a href="http://docs.python.org/2/library/functions.html#property" rel="nofollow">^{<cd2>} descriptor</a>:</p>
<pre><code>class PermissionChecker(object):
@property
def permissions(self):
return [self.is_superuser(), self.is_god()]
def is_superuser(self):
# use self.property just like self.name...
return True
def is_god(self):
return True
</code></pre>
<p>通过使用<code>property</code>(上面用作<code>@</code>装饰符),可以将方法转换为属性:</p>
<pre><code>>>> pcheck = PermissionChecker()
>>> pcheck.permissions
[True, True]
</code></pre>
<p>每次对实例访问<code>.permissions</code>属性时,都会调用<code>permissions</code>方法。你知道吗</p>
<p>或者,在<code>__init__</code>初始值设定项中设置列表:</p>
<pre><code>class PermissionChecker(object):
def __init__(self):
self.permissions = [self.is_superuser(), self.is_god()]
def is_superuser(self):
# use self.property just like self.name...
return True
def is_god(self):
return True
</code></pre>