Skip to content

Commit ada3fa4

Browse files
Add accessors to class attribute (pandas-dev#20780)
Re-using the _accessors attribute, since nothing seemed to rely on it being a frozenset. Closes pandas-dev#19963
1 parent 0ae7e90 commit ada3fa4

File tree

6 files changed

+10
-4
lines changed

6 files changed

+10
-4
lines changed

pandas/core/accessor.py

+1
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ def decorator(accessor):
148148
UserWarning,
149149
stacklevel=2)
150150
setattr(cls, name, CachedAccessor(name, accessor))
151+
cls._accessors.add(name)
151152
return accessor
152153
return decorator
153154

pandas/core/frame.py

+1
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ def _constructor(self):
326326
_constructor_sliced = Series
327327
_deprecations = NDFrame._deprecations | frozenset(
328328
['sortlevel', 'get_value', 'set_value', 'from_csv', 'from_items'])
329+
_accessors = set()
329330

330331
@property
331332
def _constructor_expanddim(self):

pandas/core/indexes/base.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,8 @@ class Index(IndexOpsMixin, PandasObject):
242242

243243
_engine_type = libindex.ObjectEngine
244244

245-
_accessors = frozenset(['str'])
245+
_accessors = set(['str'])
246+
246247
str = CachedAccessor("str", StringMethods)
247248

248249
def __new__(cls, data=None, dtype=None, copy=False, name=None,

pandas/core/series.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ class Series(base.IndexOpsMixin, generic.NDFrame):
153153
Copy input data
154154
"""
155155
_metadata = ['name']
156-
_accessors = frozenset(['dt', 'cat', 'str'])
156+
_accessors = set(['dt', 'cat', 'str'])
157157
_deprecations = generic.NDFrame._deprecations | frozenset(
158158
['asobject', 'sortlevel', 'reshape', 'get_value', 'set_value',
159159
'from_csv', 'valid'])

pandas/tests/test_register_accessor.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def ensure_removed(obj, attr):
1717
delattr(obj, attr)
1818
except AttributeError:
1919
pass
20+
obj._accessors.discard(attr)
2021

2122

2223
class MyAccessor(object):
@@ -38,13 +39,14 @@ def method(self):
3839
(pd.DataFrame, pd.api.extensions.register_dataframe_accessor),
3940
(pd.Index, pd.api.extensions.register_index_accessor)
4041
])
41-
def test_series_register(obj, registrar):
42+
def test_register(obj, registrar):
4243
with ensure_removed(obj, 'mine'):
4344
before = set(dir(obj))
4445
registrar('mine')(MyAccessor)
4546
assert obj([]).mine.prop == 'item'
4647
after = set(dir(obj))
4748
assert (before ^ after) == {'mine'}
49+
assert 'mine' in obj._accessors
4850

4951

5052
def test_accessor_works():

scripts/validate_docstrings.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,8 @@ def doc_parameters(self):
182182
@property
183183
def signature_parameters(self):
184184
if (inspect.isclass(self.method_obj)
185-
and self.method_name.split('.')[-1] in {'dt', 'str', 'cat'}):
185+
and self.method_name.split('.')[-1] in
186+
self.method_obj._accessors):
186187
# accessor classes have a signature, but don't want to show this
187188
return tuple()
188189
try:

0 commit comments

Comments
 (0)