我有两个类,它们包含一些相同的属性块对。 这些类共享一个共同的祖先,但也有不相同的兄弟姐妹 需要这些属性。你知道吗
我不想重复属性代码块。你知道吗
在Getter中,我的方法是调用另一个类中的权威方法:
# in ConcreteFooz.baz_per_bar:
def baz_per_bar(self):
return ConcreteFoo.baz_per_bar(self)
因为@properties似乎更适合我的需要。 当我尝试时:
# in ConcreteFooz.baz_per_bar:
def baz_per_bar(self):
return ConcreteFoo.baz_per_bar(self)
我回来了:
*** TypeError: 'property' object is not callable
所以
所以我们通常指的是:
import itertools
class MyBaseClass(object):
pass
class ConcreteFoo(MyBaseClass):
@property
def baz_per_bar(self):
"""Returns as dict of {baz: list bar}"""
# do baz lookup
# do bar lookup
# associcate and return
return 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):
@property
def baz_per_bar(self):
"""Returns as dict of {baz: list bar}"""
# do baz lookup
# do bar lookup
# associcate and return
return my_baz_per_bar
@property
def baz_chain(self):
"""Flattens baz_per_bar into baz's"""
return itertools.chain(*self._baz_chain.values())
class ConcreteJaz(MyBaseClass):
pass
# Does not need property lookup
是的,您可以使用另一个类的属性而不扩展该类。考虑一下这个计划:
或者,考虑以下片段:
请注意,我确实修改了示例中的
ConcreteFoo
,但只是为了修复其中的NameError
。你知道吗我不太确定。米辛能满足你的需要吗?你知道吗
相关问题 更多 >
编程相关推荐