@@ -76,13 +76,24 @@ def f(self, other, axis='items'):
76
76
77
77
return f
78
78
79
+ class PanelAxis (object ):
80
+
81
+ def __init__ (self , cache_field ):
82
+ self .cache_field = cache_field
83
+
84
+ def __get__ (self , obj , type = None ):
85
+ return getattr (obj , self .cache_field )
86
+
87
+ def __set__ (self , obj , value ):
88
+ if not isinstance (value , Index ):
89
+ value = Index (value )
90
+
91
+ setattr (obj , self .cache_field , value )
92
+
79
93
class Panel (Picklable ):
80
94
"""
81
95
Abstract superclass for LongPanel and WidePanel data structures
82
96
"""
83
- _items = None
84
- _major_axis = None
85
- _minor_axis = None
86
97
_values = None
87
98
factors = None
88
99
@@ -98,6 +109,10 @@ class Panel(Picklable):
98
109
__rdiv__ = _arith_method (lambda x , y : y / x , '__rdiv__' )
99
110
__rpow__ = _arith_method (lambda x , y : y ** x , '__rpow__' )
100
111
112
+ items = PanelAxis ('_items' )
113
+ major_axis = PanelAxis ('_major_axis' )
114
+ minor_axis = PanelAxis ('_minor_axis' )
115
+
101
116
def __repr__ (self ):
102
117
class_name = str (self .__class__ )
103
118
@@ -130,39 +145,6 @@ def iteritems(self):
130
145
for item in self :
131
146
yield item , self [item ]
132
147
133
- def _get_items (self ):
134
- return self ._items
135
-
136
- def _set_items (self , items ):
137
- if not isinstance (items , Index ):
138
- items = Index (items )
139
-
140
- self ._items = items
141
-
142
- items = property (fget = _get_items , fset = _set_items )
143
-
144
- def _get_major_axis (self ):
145
- return self ._major_axis
146
-
147
- def _set_major_axis (self , major_axis ):
148
- if not isinstance (major_axis , Index ):
149
- major_axis = Index (major_axis )
150
-
151
- self ._major_axis = major_axis
152
-
153
- major_axis = property (fget = _get_major_axis , fset = _set_major_axis )
154
-
155
- def _get_minor_axis (self ):
156
- return self ._minor_axis
157
-
158
- def _set_minor_axis (self , minor_axis ):
159
- if not isinstance (minor_axis , Index ):
160
- minor_axis = Index (minor_axis )
161
-
162
- self ._minor_axis = minor_axis
163
-
164
- minor_axis = property (fget = _get_minor_axis , fset = _set_minor_axis )
165
-
166
148
@property
167
149
def dims (self ):
168
150
return len (self .items ), len (self .major_axis ), len (self .minor_axis )
@@ -172,6 +154,7 @@ def dims(self):
172
154
'major' : 1 ,
173
155
'minor' : 2
174
156
}
157
+
175
158
_WIDE_AXIS_NAMES = dict ((v , k ) for k , v in _WIDE_AXIS_NUMBERS .iteritems ())
176
159
177
160
0 commit comments