This is easy to accomplish by overriding __dir__
and __getattribute__
:
class Empty(object):
def __dir__(self):
return []
def __getattribute__(self, name):
raise AttributeError("'{0}' object has no attribute '{1}'".format(type(self).__name__, name))
e = Empty()
dir(e)
[]
e.__name__
AttributeError: 'Empty' object has no attribute '__name__'
(In python2, Empty
needs to be a new-style class, so the class Empty(object):
is required; in python3 old-style classes are extinct so class Empty:
is sufficient.)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…