This wiki is in the process of being archived due to lack of usage and the resources necessary to serve it — predominately to bots, crawlers, and LLM companies. Edits are discouraged.
Pages are preserved as they were at the time of archival. For current information, please visit python.org.
If a change to this archive is absolutely needed, requests can be made via the infrastructure@python.org mailing list.

Proxy

See also http://www.python.org/workshops/1997-10/proceedings/savikko.html

special method names


pro

  • ??


cons

  • ??

 1 # Code is Public Domain.
 2 class Proxy(object):
 3  def __init__(self, subject):
 4  self._subject = subject
 5  
 6  def __getattr__(self, attrName):
 7  return getattr(self._subject, attrName)
 8  
 9  def __setattr__(self, attrName, value):
 10  object.__setattr__(self, attrName, value)
 11 
 12  def __delattr__(self, attrName):
 13  delattr(self._subject, attrName)
 14 
 15  def __call__(self,*args,**keys):
 16  object.__getattribute__(self,'_subject')(*args,**keys)
 17 
 18  def __getitem__(self,key):
 19  return object.__getattribute__(self,'_subject')[key]
 20 
 21 ## should implement other special method names here
 22 ## see http://www.python.org/doc/2.3.2/ref/specialnames.html
 23 
 24 class Test:
 25  def __init__(self):
 26  self.toto = "toto"
 27 
 28  def foo(self):
 29  print "foo"
 30 
 31  def __call__(self,a,b,more=False):
 32  print self.__class__.__name__,id(self)
 33  print a,b,more
 34 
 35  def __getitem__(self,key):
 36  return 'Test%s' % key
 37 
 38 t = Test()
 39 p = Proxy(t)
 40 
 41 print p.toto
 42 p.foo()
 43 p('1',2,more=True)
 44 print p['Blabla']

2026年02月14日 16:12

AltStyle によって変換されたページ (->オリジナル) /