1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
20
23 self.class_property = CreateDict()
24 self.class_property_resolver = CreateDict()
25 self.class_resolver = {}
26
28 try:
29 klass = obj.__class__
30 except AttributeError:
31 raise KeyError("built-in instance")
32
33 return self.resolve_class(klass, property)
34
36
37 try:
38 return self.class_property[klass][property]
39 except KeyError:
40 pass
41
42
43 try:
44 return self.class_property_resolver[klass][property](
45 self, klass, property)
46 except KeyError:
47 pass
48
49
50 try:
51 return self.class_resolver[klass](self, klass, property)
52 except KeyError:
53 pass
54
55
56
57
58
59
60 bases = list(klass.__bases__)
61 while bases:
62 base = bases.pop()
63 try:
64 return self.class_property[base][property]
65 except KeyError:
66 pass
67 try:
68 return self.class_property_resolver[base][property](
69 self, klass, property)
70 except KeyError:
71 pass
72 try:
73 return self.class_resolver[base](self, klass, property)
74 except KeyError:
75 pass
76
77
78 bases[:0] = list(base.__bases__)
79 raise KeyError("cannot find property %s for class %s" \
80 % (property, klass))
81
82
83 default_manager = PropertyManager()
84