-
Notifications
You must be signed in to change notification settings - Fork 0
/
setter_getter.py
77 lines (63 loc) · 1.75 KB
/
setter_getter.py
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
# encoding: utf-8
# http://docs.python.org/library/functions.html#property
import unittest
try:
from oktest import test, ok
except ImportError:
import sys
print u"Require oktest framework"
sys.exit(0)
class PropertyOwner(object):
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
class GetAtter(object):
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
@x.getter
def x(self):
return self._x + 1
class PropertyTest(unittest.TestCase):
@test("@x.setterが使える")
def _(self):
p = PropertyOwner()
p.x = 1
ok(p.x) == 1
@test("propertyを定義しないとsetterは使えない")
def _(self):
def createNoPropertyObject():
class NoPropery(object):
""" @properyがないクラスを作る """
@x.setter
def x(self, value):
self._x = value
@x.getter
def x(self):
return self._x
return NoPropery()
ok(createNoPropertyObject).raises(NameError)
@test("継承では使えない")
def _(self):
def createExtends():
class PropertyExtend(PropertyOwner):
""" 継承して@getterを付けてみる """
@x.getter
def x(self):
return self._x
return PropertyExtend()
ok(createExtends).raises(NameError)
@test("@x.getattrが優先される")
def _(self):
p = GetAtter()
p.x = 1
ok(p.x) == 2
ok(p._x) == 1
if __name__ == "__main__":
unittest.main()