<reponame>tdiprima/code
def all_members(aClass):
    members = {}
    bases = list(aClass.__bases__)
    bases.reverse()
    for base in bases:
        members.update(all_members(base))
    members.update(vars(aClass))
    return members

class Eggs:
    eggs = 'eggs'
    spam = None

class Spam:
    spam = 'spam'

class Breakfast(Spam, Eggs):
    eggs = 'scrambled'

print all_members(Eggs)
print all_members(Spam)
print all_members(Breakfast)

# Output:
# {'spam': None, '__doc__': None, 'eggs': 'eggs', '__module__': '__main__'}
# {'spam': 'spam', '__doc__': None, '__module__': '__main__'}
# {'__doc__': None, 'eggs': 'scrambled', 'spam': 'spam', '__module__': '__main__'}

def all_members(aClass):
    members = {}
    bases = list(aClass.__bases__)
    bases.reverse()
    for base in bases:
        members.update(all_members(base))
    members.update(vars(aClass))
    return members

class Eggs:
    eggs = 'eggs'
    spam = None

class Spam:
    spam = 'spam'

class Breakfast(Spam, Eggs):
    eggs = 'scrambled'

print all_members(Eggs)
print all_members(Spam)
print all_members(Breakfast)

# Output:
# {'spam': None, '__doc__': None, 'eggs': 'eggs', '__module__': '__main__'}
# {'spam': 'spam', '__doc__': None, '__module__': '__main__'}
# {'__doc__': None, 'eggs': 'scrambled', 'spam': 'spam', '__module__': '__main__'}
# Output: # {'spam': None, '__doc__': None, 'eggs': 'eggs', '__module__': '__main__'} # {'spam': 'spam', '__doc__': None, '__module__': '__main__'} # {'__doc__': None, 'eggs': 'scrambled', 'spam': 'spam', '__module__': '__main__'}