En su lugar, puede usar el vars
function.
Por ejemplo:
>>> class C(object):
... def __init__(self):
... self.__foo = 'foo'
...
>>> c = C()
>>> dir(c)
['_C__foo', '__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'__weakref__']
>>> vars(c)
{'_C__foo': 'foo'}
Tenga en cuenta que, cuando Niklas R ha señalado, las variables con un solo subrayado también se consideran privados. Sin embargo, la función vars()
tiene la ventaja de eliminar todas las variables de instancia excepto las variables de instancia.
¿Qué problema está resolviendo en primer lugar que este constructo es útil? – SingleNegationElimination
¿Qué pasa con 'for name in filter (lambda x: not x.startswith ('_'), dir (obj)):'? Tenga en cuenta que en Python, incluso un solo guión bajo ('_') está destinado a indicar un atributo *" privado "*. –
@NiklasR 'para el nombre en (x para x en dir (obj) si no x.startswith ('_')):' no necesita filtro –