Advertisement
Guest User

Untitled

a guest
Jan 3rd, 2012
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.44 KB | None | 0 0
  1. class CardHolder:
  2.     acctlen = 8                               # Class data
  3.     retireage = 59.5
  4.  
  5.     def __init__(self, acct, name, age, addr):
  6.         self.acct = acct                         # Instance data
  7.         self.name = name                         # These trigger __set__ calls too
  8.         self.age  = age                       # __X not needed: in descriptor
  9.         self.addr = addr                         # addr is not managed
  10.                                                  # remain has no data
  11.     class Name:
  12.         def __get__(self, instance, owner):   # Class names: CardHolder locals
  13.             return self.name
  14.         def __set__(self, instance, value):
  15.             value = value.lower().replace(' ', '_')
  16.             self.name = value
  17.     name = Name()
  18.  
  19.     class Age:
  20.         def __get__(self, instance, owner):
  21.             return self.age                          # Use descriptor data
  22.         def __set__(self, instance, value):
  23.             if value < 0 or value > 150:
  24.                 raise ValueError('invalid age')
  25.             else:
  26.                 self.age = value
  27.     age = Age()
  28.  
  29.     class Acct:
  30.         def __get__(self, instance, owner):
  31.             return self.acct[:-3] + '***'
  32.         def __set__(self, instance, value):
  33.             value = value.replace('-', '')
  34.             if len(value) != instance.acctlen:        # Use instance class data
  35.                 raise TypeError('invald acct number')
  36.             else:
  37.                 self.acct = value
  38.     acct = Acct()
  39.  
  40.     class Remain:
  41.         def __get__(self, instance, owner):
  42.             return instance.retireage - instance.age    # Triggers Age.__get__
  43.         def __set__(self, instance, value):
  44.             raise TypeError('cannot set remain')        # Else set allowed here
  45.     remain = Remain()
  46.  
  47.  
  48. bob = CardHolder('1234-5678', 'Bob Smith', 40, '123 main st')
  49. print(bob.acct, bob.name, bob.age, bob.remain, bob.addr, sep=' / ')
  50. bob.name = 'Bob Q. Smith'
  51. bob.age  = 50
  52. bob.acct = '23-45-67-89'
  53. print(bob.acct, bob.name, bob.age, bob.remain, bob.addr, sep=' / ')
  54.  
  55. sue = CardHolder('5678-12-34', 'Sue Jones', 35, '124 main st')
  56. print(sue.acct, sue.name, sue.age, sue.remain, sue.addr, sep=' / ')
  57. try:
  58.     sue.age = 200
  59. except:
  60.     print('Bad age for Sue')
  61.  
  62. try:
  63.     sue.remain = 5
  64. except:
  65.     print("Can't set sue.remain")
  66.  
  67. try:
  68.     sue.acct = '1234567'
  69. except:
  70.     print('Bad acct for Sue')
  71.  
  72.  
  73. print("bob's name:", bob.name)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement