Okay, we walk it back. When we gave `a`

and area attribute, it did not actually become a class variable. My bad. It’s what happens when we toss something together and expect it to work without testing it. Big no-no.

Let’s work this around…

```
>>> Circle.area = 100
>>> a.area
10
>>> b.area
100
>>>
```

Also, any new instance will have the same area.

```
>>> c = Circle()
>>> c.area
100
>>>
```

Now we see the real effect of defining a class attribute as opposed to an instance attribute. But it would tedious if we had to do this all the time with every new instance. That is why we initialize.

```
>>> from math import pi
>>> class Circle:
PI = float(f"{pi:.5f}")
def __init__(self, radius):
self.r = radius
self.area = self.calc_area()
self.circumference = self.calc_circumference()
def calc_circumference(self):
return self.r * 2 * self.PI
def calc_area(self):
return self.r ** 2 * self.PI
>>> a = Circle(10)
>>> b = Circle(20)
>>> c = Circle(30)
>>> a.area
314.159
>>> b.area
1256.636
>>> c.area
2827.431
>>> a.circumference
62.8318
>>> b.circumference
125.6636
>>> c.circumference
188.4954
>>>
```

Now we can see how the class itself can have transient instances…

```
>>> Circle(5).area
78.53975
>>> Circle(5).circumference
31.4159
>>>
```