12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/user/bin/env python
- '''http://code.activestate.com/recipes/68205-null-object-design-pattern/'''
- class Null:
- def __init__(self, *args, **kwargs):
- "Ignore parameters."
- return None
- def __call__(self, *args, **kwargs):
- "Ignore method calls."
- return self
- def __getattr__(self, mname):
- "Ignore attribute requests."
- return self
- def __setattr__(self, name, value):
- "Ignore attribute setting."
- return self
- def __delattr__(self, name):
- "Ignore deleting attributes."
- return self
- def __repr__(self):
- "Return a string representation."
- return "<Null>"
- def __str__(self):
- "Convert to a string and return it."
- return "Null"
- def test():
- "Perform some decent tests, or rather: demos."
- # constructing and calling
- n = Null()
- print(n)
- n = Null('value')
- print(n)
- n = Null('value', param='value')
- print(n)
- n()
- n('value')
- n('value', param='value')
- print(n)
- # attribute handling
- n.attr1
- print('attr1', n.attr1)
- n.attr1.attr2
- n.method1()
- n.method1().method2()
- n.method('value')
- n.method(param='value')
- n.method('value', param='value')
- n.attr1.method1()
- n.method1().attr1
- n.attr1 = 'value'
- n.attr1.attr2 = 'value'
- del n.attr1
- del n.attr1.attr2.attr3
- # representation and conversion to a string
-
- assert repr(n) == '<Null>'
- assert str(n) == 'Null'
- if __name__ == '__main__':
- test()
|