File: LP6E/Chapter30/private0.py
class Privacy:
def __setattr__(self, attr, value): # On self.attr = value
if attr in self.privates:
raise NameError(f'{attr!r} for {self}')
else:
self.__dict__[attr] = value # Avoid loops by using dict key
class Test1(Privacy):
privates = ['age']
class Test2(Privacy):
privates = ['name', 'pay']
def __init__(self):
self.__dict__['name'] = 'Pat' # To do better, see Chapter 39!
if __name__ == '__main__':
x = Test1()
x.name = 'Sue' # Works
print(x.name)
#x.age = 40 # Fails
y = Test2()
y.age = 30 # Works
print(y.age)
#y.name = 'Bob' # Fails