12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """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()
- ### OUTPUT ###
- # Null
- # Null
- # Null
- # Null
- # attr1 Null
|