Is the use of `_pn` in `__init__` pythonic? It seems that most examples change the actual attribute to `self._pn` to indicate it's private, but I would like to be able to call `self.pn` but have the advantage of checks with setters.

The following code will cause a recursive loop:

```
class part:
'Holds various attributes of interest for a part number'
def __init__(self, pn):
    self.pn = pn

def set_pn(self, pn):
    if type(pn) != str:
        raise Exception("Part number needs to be a string")
    self.pn = _pn

pn = property(fset = set_pn)

```

The following won't, but I'm not sure if `_pn` is pythonic:

```
class part:
'Holds various attributes of interest for a part number'
def __init__(self, _pn):
    self.pn = _pn

def set_pn(self, pn):
    if type(pn) != str:
        raise Exception("Part number needs to be a string")
    self.pn = _pn

_pn = property(fset = set_pn)

```