ユーザー定義のPythonicクラスについて考えてみましょう。組み込み関数の変更
['__class__', '__delattr__', '__dict__', '__dir__', ... '__weakref__', 'bases',
'build_full_name', 'candidates', ... 'update_name'].
あなたはこのリスト内の属性の2種類を見ることができます:
- 組み込み属性、定義された
- ユーザー私は
dir(obect_of_class)
を呼び出すと、私はその属性のリストを取得します。
__dir__
を無効にする必要があります。つまり、ユーザー定義のattribltesだけが返されます。私はそれをどのようにすることができますか?
オーバーライドされた関数で自分自身を呼び出すと、無限の再帰が得られることは明らかです。だから、私はこのようにsomethigをしたい:
def __dir__(self):
return list(filter(lambda x: not re.match('__\S*__', x), dir(self)))
しかし、無限の再帰を回避する。
一般に、最初から書き込むのではなく、既存の関数を変更したい場合、どのように組み込み関数を変更できますか?
代わりに 'dir(ClassName)'を使ってみましたか? – DainDwarf