# your code goes here
class A1:
def __init__ ( self , a, b) :
self .a = a
self .b = b
self .c = 10
def pnt1( self ) :
for prop in dir ( self ) :
if prop.startswith ( '__' ) and prop.endswith ( '__' ) :
continue
if hasattr ( self , prop) :
print ( prop)
print ( getattr ( self , prop) )
print ( "A1" )
class A2:
def __init__ ( self , a, b) :
self .a = a
self .b = b
self .c = 12
self .d = 34
def pnt2( self ) :
for prop in dir ( self ) :
if prop.startswith ( '__' ) and prop.endswith ( '__' ) :
continue
if hasattr ( self , prop) :
print ( prop)
print ( getattr ( self , prop) )
print ( "A2" )
a = A1( 5 , 6 ) # a = 5, b= 6, c = 10
b = A2( 1 , 2 ) # a = 1, b = 2, c = 12, d = 10
def copy_properties( source, target) :
for prop in dir ( source) :
if prop.startswith ( '__' ) and prop.endswith ( '__' ) :
continue # Skip built-in properties
if hasattr ( target, prop) :
print ( 'LOL :' )
print ( prop)
setattr ( target, prop, getattr ( source, prop) )
print ( "CP" )
a.pnt1 ( )
b.pnt2 ( )
copy_properties( a, b)
b.pnt2 ( )
# b.pnt1()
print ( b.d )
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCgpjbGFzcyBBMToKCWRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKCQlzZWxmLmEgPSBhCgkJc2VsZi5iID0gYgoJCXNlbGYuYyA9IDEwCglkZWYgcG50MShzZWxmKToKCQlmb3IgcHJvcCBpbiBkaXIoc2VsZik6CgkJCWlmIHByb3Auc3RhcnRzd2l0aCgnX18nKSBhbmQgcHJvcC5lbmRzd2l0aCgnX18nKToKCQkJCWNvbnRpbnVlCgkJCWlmIGhhc2F0dHIoc2VsZiwgcHJvcCk6CgkJCQlwcmludChwcm9wKQoJCQkJcHJpbnQoZ2V0YXR0cihzZWxmLCBwcm9wKSkKCQlwcmludCgiQTEiKQoJCQpjbGFzcyBBMjoKCWRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKCQlzZWxmLmEgPSBhCgkJc2VsZi5iID0gYgoJCXNlbGYuYyA9IDEyCgkJc2VsZi5kID0gMzQKCWRlZiBwbnQyKHNlbGYpOgoJCWZvciBwcm9wIGluIGRpcihzZWxmKToKCQkJaWYgcHJvcC5zdGFydHN3aXRoKCdfXycpIGFuZCBwcm9wLmVuZHN3aXRoKCdfXycpOgoJCQkJY29udGludWUKCQkJaWYgaGFzYXR0cihzZWxmLCBwcm9wKToKCQkJCXByaW50KHByb3ApCgkJCQlwcmludChnZXRhdHRyKHNlbGYsIHByb3ApKQoJCXByaW50KCJBMiIpCiAgICAgICAgICAgIAoKYSA9IEExKDUsIDYpICMgYSA9IDUsIGI9IDYsIGMgPSAxMApiID0gQTIoMSwgMikgIyBhID0gMSwgYiA9IDIsIGMgPSAxMiwgZCA9IDEwCgpkZWYgY29weV9wcm9wZXJ0aWVzKHNvdXJjZSwgdGFyZ2V0KToKICAgIGZvciBwcm9wIGluIGRpcihzb3VyY2UpOgogICAgICAgIGlmIHByb3Auc3RhcnRzd2l0aCgnX18nKSBhbmQgcHJvcC5lbmRzd2l0aCgnX18nKToKICAgICAgICAgICAgY29udGludWUgICMgU2tpcCBidWlsdC1pbiBwcm9wZXJ0aWVzCiAgICAgICAgaWYgaGFzYXR0cih0YXJnZXQsIHByb3ApOgogICAgICAgICAgICBwcmludCgnTE9MIDonKQogICAgICAgICAgICBwcmludChwcm9wKQogICAgICAgICAgICBzZXRhdHRyKHRhcmdldCwgcHJvcCwgZ2V0YXR0cihzb3VyY2UsIHByb3ApKQogICAgICAgICAgICAKICAgIHByaW50KCJDUCIpCmEucG50MSgpCmIucG50MigpCmNvcHlfcHJvcGVydGllcyhhLCBiKQpiLnBudDIoKQojIGIucG50MSgpCnByaW50KGIuZCkK