In [1]:
class Namespace():
    pass

In [2]:
cars = Namespace()

In [3]:
cars


Out[3]:
<__main__.Namespace at 0xb2956fcc>

In [4]:
employee = Namespace()
employee


Out[4]:
<__main__.Namespace at 0xb29752ac>

In [5]:
employee.first_name = 'John'
employee.last_name = 'Doe'
employee.age = 123
employee.greeting = 'Hello'
joe = employee
joe


Out[5]:
<__main__.Namespace at 0xb29752ac>

In [6]:
dir(joe)


Out[6]:
['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 'age',
 'first_name',
 'greeting',
 'last_name']

In [7]:
[name for name in dir(joe) if not name.startswith('_')]


Out[7]:
['age', 'first_name', 'greeting', 'last_name']

In [8]:
del joe.age
[name for name in dir(joe) if not name.startswith('_')]


Out[8]:
['first_name', 'greeting', 'last_name']

In [9]:
bob = Namespace()
bob.model = 'Far'
[name for name in dir(bob) if not name.startswith('_')]


Out[9]:
['model']

In [10]:
def add(a, b):
    return a + b

In [11]:
add(3, 5)


Out[11]:
8

In [12]:
add.model = "Maxima"
add.make = "Nissan"

In [13]:
add(10, 20)


Out[13]:
30

In [14]:
add.model


Out[14]:
'Maxima'

In [15]:
[name for name in dir(add) if not name.startswith('_')]


Out[15]:
['make', 'model']

In [16]:
dir(add)


Out[16]:
['__annotations__',
 '__call__',
 '__class__',
 '__closure__',
 '__code__',
 '__defaults__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__get__',
 '__getattribute__',
 '__globals__',
 '__gt__',
 '__hash__',
 '__init__',
 '__kwdefaults__',
 '__le__',
 '__lt__',
 '__module__',
 '__name__',
 '__ne__',
 '__new__',
 '__qualname__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'make',
 'model']