# 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 )
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmNsYXNzIEExOgoJZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgoJCXNlbGYuYSA9IGEKCQlzZWxmLmIgPSBiCgkJc2VsZi5jID0gMTAKCWRlZiBwbnQxKHNlbGYpOgoJCWZvciBwcm9wIGluIGRpcihzZWxmKToKCQkJaWYgcHJvcC5zdGFydHN3aXRoKCdfXycpIGFuZCBwcm9wLmVuZHN3aXRoKCdfXycpOgoJCQkJY29udGludWUKCQkJaWYgaGFzYXR0cihzZWxmLCBwcm9wKToKCQkJCXByaW50KHByb3ApCgkJCQlwcmludChnZXRhdHRyKHNlbGYsIHByb3ApKQoJCXByaW50KCJBMSIpCgkJCmNsYXNzIEEyOgoJZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgoJCXNlbGYuYSA9IGEKCQlzZWxmLmIgPSBiCgkJc2VsZi5jID0gMTIKCQlzZWxmLmQgPSAzNAoJZGVmIHBudDIoc2VsZik6CgkJZm9yIHByb3AgaW4gZGlyKHNlbGYpOgoJCQlpZiBwcm9wLnN0YXJ0c3dpdGgoJ19fJykgYW5kIHByb3AuZW5kc3dpdGgoJ19fJyk6CgkJCQljb250aW51ZQoJCQlpZiBoYXNhdHRyKHNlbGYsIHByb3ApOgoJCQkJcHJpbnQocHJvcCkKCQkJCXByaW50KGdldGF0dHIoc2VsZiwgcHJvcCkpCgkJcHJpbnQoIkEyIikKICAgICAgICAgICAgCgphID0gQTEoNSwgNikgIyBhID0gNSwgYj0gNiwgYyA9IDEwCmIgPSBBMigxLCAyKSAjIGEgPSAxLCBiID0gMiwgYyA9IDEyLCBkID0gMTAKCmRlZiBjb3B5X3Byb3BlcnRpZXMoc291cmNlLCB0YXJnZXQpOgogICAgZm9yIHByb3AgaW4gZGlyKHNvdXJjZSk6CiAgICAgICAgaWYgcHJvcC5zdGFydHN3aXRoKCdfXycpIGFuZCBwcm9wLmVuZHN3aXRoKCdfXycpOgogICAgICAgICAgICBjb250aW51ZSAgIyBTa2lwIGJ1aWx0LWluIHByb3BlcnRpZXMKICAgICAgICBpZiBoYXNhdHRyKHRhcmdldCwgcHJvcCk6CiAgICAgICAgICAgIHByaW50KCdMT0wgOicpCiAgICAgICAgICAgIHByaW50KHByb3ApCiAgICAgICAgICAgIHNldGF0dHIodGFyZ2V0LCBwcm9wLCBnZXRhdHRyKHNvdXJjZSwgcHJvcCkpCiAgICAgICAgICAgIAogICAgcHJpbnQoIkNQIikKYS5wbnQxKCkKYi5wbnQyKCkKY29weV9wcm9wZXJ0aWVzKGEsIGIpCmIucG50MigpCiMgYi5wbnQxKCkKcHJpbnQoYi5kKQ==