<p>是的,您可以使用另一个类的属性而不扩展该类。考虑一下这个计划:</p>
<pre><code>import itertools
class MyBaseClass(object):
pass
class ConcreteFoo(MyBaseClass):
def __init__(self):
self.my_baz_per_bar = { 'A' : ['apple', 'aardvark'] }
@property
def baz_per_bar(self):
"""Returns as dict of {baz: list bar}"""
# do baz lookup
# do bar lookup
# associcate and return
return self.my_baz_per_bar
@property
def baz_chain(self):
"""Flattens baz_per_bar into baz's"""
return itertools.chain(*self._baz_chain.values())
class ConcreteFooz(MyBaseClass):
def __init__(self):
self.my_baz_per_bar = { 'Z' : ['zero', 'zebra'] }
baz_per_bar = ConcreteFoo.baz_per_bar
baz_chain = ConcreteFoo.baz_chain
class ConcreteJaz(MyBaseClass):
pass
# Does not need property lookup
print ConcreteFoo().baz_per_bar
print ConcreteFooz().baz_per_bar
</code></pre>
<p>或者,考虑以下片段:</p>
<pre><code> @property
def baz_per_bar(self):
return ConcreteFoo.baz_per_bar.fget(self)
</code></pre>
<p>请注意,我确实修改了示例中的<code>ConcreteFoo</code>,但只是为了修复其中的<code>NameError</code>。你知道吗</p>