forked from faif/python-patterns
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnull.py
More file actions
Latest commit
78 lines (57 loc) · 1.51 KB
/
Copy pathnull.py
File metadata and controls
78 lines (57 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/user/bin/env python
'''http://code.activestate.com/recipes/68205-null-object-design-pattern/'''
classNull:
def__init__(self, *args, **kwargs):
"Ignore parameters."
returnNone
def__call__(self, *args, **kwargs):
"Ignore method calls."
returnself
def__getattr__(self, mname):
"Ignore attribute requests."
returnself
def__setattr__(self, name, value):
"Ignore attribute setting."
returnself
def__delattr__(self, name):
"Ignore deleting attributes."
returnself
def__repr__(self):
"Return a string representation."
return"<Null>"
def__str__(self):
"Convert to a string and return it."
return"Null"
deftest():
"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'
deln.attr1
deln.attr1.attr2.attr3
# representation and conversion to a string
assertrepr(n) =='<Null>'
assertstr(n) =='Null'
if__name__=='__main__':
test()