extending class static members and inheritance
Arnaud Delobelle
arnodel at gmail.com
Tue Apr 2 11:24:42 EDT 2013
On 2 April 2013 14:27, Fabian PyDEV <pydev at hotmail.com> wrote:
> Hi All,
>
> I have a question.
>
> Let says I have the following two classes:
>
> class Base(object):
> __mylist__ = ["value1", "value2"]
>
> def somemethod(self):
> pass
>
>
> class Derived(Base):
> __mylist__ = ["value3", "value4"]
>
> def anothermethod(self):
> pass
>
>
>
>
> what I would like to accomplish is that the class Derived has the member __mylist__ extended or merged as ["value1", "value2", "value3", "value4"].
>
> Is there anyway I could accomplish this?
>
> I was thinking on accomplishing this as follows:
>
>
> class Derived(Base):
> __mylist__ = Base.__mylist__ + ["value3", "value4"]
>
> def anothermethod(self):
> pass
>
>
> Is there a better way? Perhaps a decorator?
class Base(object):
mybits = ["value1", "value2"]
@classmethod
def mylist(cls):
return sum((getattr(p, 'mybits', []) for p in cls.mro()[::-1]), [])
class Derived(Base):
mybits = ["value3", "value4"]
class FurtherDerived(Derived):
mybits = ["value5"]
>>> Derived.mylist()
['value1', 'value2', 'value3', 'value4']
>>> FurtherDerived.mylist()
['value1', 'value2', 'value3', 'value4', 'value5']
HTH
--
Arnaud
More information about the Python-list
mailing list