"""
<class '__main__.cchild'> False
True
<class '__main__.cchild'> True
a_base_attr a_child_attr
"""
class cbase(object):
def __new__(cls):
#cls is a class, not instance
print cls,isinstance(cls,cbase)
#create an instance of sup, and bound cls to it
sup=super(cbase, cls)
print isinstance(sup,super)
#now sup know how to create instance of cbase
inst_of_cbase = sup.__new__(cls)
print type(inst_of_cbase),isinstance(inst_of_cbase,cbase)
#
return inst_of_cbase
def __init__(self,base_attr):
self.base_attr=base_attr
class cchild(cbase):
def __new__(cls,base_attr,child_attr):
#before new inst of cchild, new inst of all of its ancestors
return super(cchild, cls).__new__(cchild)
def __init__(self,base_attr,child_attr):
#explicitly call ancestors's __init__
cbase.__init__(self,base_attr)
self.child_attr=child_attr
aChild=cchild("a_base_attr","a_child_attr")
print aChild.base_attr,aChild.child_attr
No comments:
Post a Comment