Extending property using a Subclass - single method - why Super(Baz, Baz).name.__set__ ?
Veek M
veek at dont-use-this.com
Tue Dec 3 04:19:28 EST 2019
class Foo(object):
@property
def name(self):
if hasattr(self, '_name'):
print('Foo name', self._name)
return self._name
else:
return 'default'
@name.setter
def name(self, value):
print('Foo', self)
self._name = value
print(self._name)
@name.deleter
def name(self):
print('del')
self._name = None
print('Foo', name)
class Baz(Foo):
@property
def name(self):
print('Baz wrapper around getter')
return super().name
@Foo.name.setter
def name(self, value):
print('Baz wrapper around setter')
print(self)
print(super(Baz,Baz).name, value)
return super(Baz, Baz).name.__set__(self, value)
b = Baz()
print('print', b.name)
b.name = 'v'
print(b.name)
Why do we user super(Baz, Baz) - are we setting a class variable called
Baz.name which would trigger Baz._name = value?
We are essentially doing:
Foo.name.__set__(Baz, value) ?
How come 'self' is not used.. like in the traditional property way where
we pass an instance reference instead of a class?
More information about the Python-list
mailing list