Right now I am learning Python and struggling with a few concepts of OOP, one of that being how difficult it is (to me) to dynamically initialize class instances and assign them to a dynamically generated variable name and why I am reading that I shouldn't do that in the first place. 

In most threads with a similar direction, the answer seems to be that it is un-Pythonic to do that.

For example [generating variable names on fly in python](https://stackoverflow.com/questions/4010840/generating-variable-names-on-fly-in-python)

Could someone please elaborate?

Take the typical OOP learning case:

```
LOE = ["graham", "eric", "terry_G", "terry_J", "john", "carol"]
class Employee():
    def __init__(self, name, job="comedian"):
        self.name = name
        self.job = job

```

Why is it better to do this:

```
employees = []
for name in LOE:
    emp = Employee(name)
    employees.append(emp)

```

and then

```
for emp in employees:
    if emp.name == "eric":
        print(emp.job)

```

instead of this

```
for name in LOE:
    globals()[name] = Employee(name)

```

and

```
print(eric.job)

```

Thanks!