@@ -86,16 +86,23 @@ def __unicode__(self):
8686 # Should be overwritten by base classes
8787 return object .__repr__ (self )
8888
89- def _local_dir (self ):
90- """ provide addtional __dir__ for this object """
91- return []
89+ def _dir_additions (self ):
90+ """ add addtional __dir__ for this object """
91+ return set ()
92+
93+ def _dir_deletions (self ):
94+ """ delete unwanted __dir__ for this object """
95+ return set ()
9296
9397 def __dir__ (self ):
9498 """
9599 Provide method name lookup and completion
96100 Only provide 'public' methods
97101 """
98- return list (sorted (list (set (dir (type (self )) + self ._local_dir ()))))
102+ rv = set (dir (type (self )))
103+ rv = rv | self ._dir_additions ()
104+ rv = rv - self ._dir_deletions ()
105+ return sorted (rv )
99106
100107 def _reset_cache (self , key = None ):
101108 """
@@ -498,8 +505,7 @@ def searchsorted(self, key, side='left'):
498505 #### needs tests/doc-string
499506 return self .values .searchsorted (key , side = side )
500507
501- # string methods
502- def _make_str_accessor (self ):
508+ def _check_str_accessor (self ):
503509 from pandas .core .series import Series
504510 from pandas .core .index import Index
505511 if isinstance (self , Series ) and not com .is_object_dtype (self .dtype ):
@@ -512,10 +518,24 @@ def _make_str_accessor(self):
512518 elif isinstance (self , Index ) and self .inferred_type != 'string' :
513519 raise AttributeError ("Can only use .str accessor with string "
514520 "values (i.e. inferred_type is 'string')" )
521+
522+ # string methods
523+ def _make_str_accessor (self ):
524+ self ._check_str_accessor ()
515525 return StringMethods (self )
516526
517527 str = AccessorProperty (StringMethods , _make_str_accessor )
518528
529+ def _dir_additions (self ):
530+ return set ()
531+
532+ def _dir_deletions (self ):
533+ try :
534+ self ._check_str_accessor ()
535+ except AttributeError :
536+ return set (['str' ])
537+ return set ()
538+
519539 _shared_docs ['drop_duplicates' ] = (
520540 """Return %(klass)s with duplicate values removed
521541
0 commit comments