overriding a property
Peter Otten
__peter__ at web.de
Wed Oct 20 10:09:12 EDT 2010
Lucasm wrote:
> On 19 Okt, 18:28, Steven D'Aprano <st... at REMOVE-THIS-
> cybersource.com.au> wrote:
>> On Tue, 19 Oct 2010 06:39:56 -0700, Lucasm wrote:
>> > Hi,
>>
>> > A question. Is it possible to dynamically override a property?
>>
>> > class A(object):
>> > @property
>> > def return_five(self):
>> > return 5
>>
>> > I would like to override the property for an instance of A to say the
>> > string 'bla'.
>> >>> class A(object):
>>
>> ... _five = 5 # class attribute shared by all instances
>> ... @property
>> ... def return_five(self):
>> ... return self._five
>> ...
>>
>> >>> a = A()
>> >>> a._five = 'bla' # set an instance attribute
>> >>> b = A()
>> >>> print a.return_five
>> bla
>> >>> print b.return_five
>>
>> 5
>>
>> --
>> Steven
>
> Thanks for the answers. I would like to override the property though
> without making special modifications in the main class beforehand. Is
> this possible?
You can dynamically change the instance's class:
>>> class A(object):
... @property
... def five(self): return 5
...
>>> a = A()
>>> b = A()
>>> class B(type(b)):
... @property
... def five(self): return "FIVE"
...
>>> b.__class__ = B
>>> a.five
5
>>> b.five
'FIVE'
But still -- what you are trying looks like a bad idea. What's your usecase?
Peter
More information about the Python-list
mailing list