Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import weakref
- import copy
- class Card(object):
- _CardPool = weakref.WeakValueDictionary()
- def __new__(cls, value, suit, **kwargs):
- obj = Card._CardPool.get(value + suit, None)
- if not obj:
- obj = object.__new__(cls)
- obj.value, obj.suit = value, suit
- Card._CardPool[value + suit] = obj
- return obj
- class MyObj(object):
- def __init__(self, value, suit):
- super(MyObj, self).__setattr__('_internal', Card(value, suit))
- def __setattr__(self, name, new_value):
- vals = self._internal.__dict__
- if name in vals.keys():
- vals = vals.copy()
- vals[name] = new_value
- card = Card(**vals)
- super(MyObj, self).__setattr__('_internal', card)
- else:
- super(MyObj, self).__setattr__(name, new_value)
- def __getattr__(self, name):
- try:
- return getattr(self._internal, name)
- except AttributeError:
- raise AttributeError("'MyObj' object has no attribute '%s'" % name)
Add Comment
Please, Sign In to add comment