E
Erwan Adam
Hi all,
I have a problem with the use of descriptors
and super. The file is :
# ---------------
class Desc(object):
def __init__(self, class_name):
self.class_name = class_name
return
def __get__(self, obj, typ):
print "Desc.__get__ : class_name is %s, obj is %s and typ is
%s"%(self.class_name, obj, typ)
return
pass
class A(object):
attr = Desc("A")
pass
class B(A):
attr = Desc("B")
pass
b = B()
print "-------"
print "Getting b.attr ..."
print "I hope that : class_name is B, obj is b and typ is B"
b.attr
print "-------"
print "Getting super(B, b).attr ..."
print "I hope that : class_name is A, obj is b and typ is A but it is
not the case !"
super(B, b).attr
print "-------"
# -----------
and the result is :
-------
Getting b.attr ...
I hope that : class_name is B, obj is b and typ is B
Desc.__get__ : class_name is B, obj is <__main__.B object at 0xb7b1f8ec>
and typ is <class '__main__.B'>
-------
Getting super(B, b).attr ...
I hope that : class_name is A, obj is b and typ is A but it is not the
case !
Desc.__get__ : class_name is A, obj is <__main__.B object at 0xb7b1f8ec>
and typ is <class '__main__.B'>
-------
I expected that when getting super(B, b).attr, typ is A, but it is not
the case ...
python used :
[adam@is111902 /home/adam/Work/Python]> python
Python 2.4.3 (#2, Sep 18 2006, 21:07:35)
[GCC 4.1.1 20060724 (prerelease) (4.1.1-3mdk)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Best regards,
E.A.
I have a problem with the use of descriptors
and super. The file is :
# ---------------
class Desc(object):
def __init__(self, class_name):
self.class_name = class_name
return
def __get__(self, obj, typ):
print "Desc.__get__ : class_name is %s, obj is %s and typ is
%s"%(self.class_name, obj, typ)
return
pass
class A(object):
attr = Desc("A")
pass
class B(A):
attr = Desc("B")
pass
b = B()
print "-------"
print "Getting b.attr ..."
print "I hope that : class_name is B, obj is b and typ is B"
b.attr
print "-------"
print "Getting super(B, b).attr ..."
print "I hope that : class_name is A, obj is b and typ is A but it is
not the case !"
super(B, b).attr
print "-------"
# -----------
and the result is :
-------
Getting b.attr ...
I hope that : class_name is B, obj is b and typ is B
Desc.__get__ : class_name is B, obj is <__main__.B object at 0xb7b1f8ec>
and typ is <class '__main__.B'>
-------
Getting super(B, b).attr ...
I hope that : class_name is A, obj is b and typ is A but it is not the
case !
Desc.__get__ : class_name is A, obj is <__main__.B object at 0xb7b1f8ec>
and typ is <class '__main__.B'>
-------
I expected that when getting super(B, b).attr, typ is A, but it is not
the case ...
python used :
[adam@is111902 /home/adam/Work/Python]> python
Python 2.4.3 (#2, Sep 18 2006, 21:07:35)
[GCC 4.1.1 20060724 (prerelease) (4.1.1-3mdk)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Best regards,
E.A.