Looking at PEP8 one can find naming conventions for variables, functions, constants...but I have not been able to get a clear view about which is the naming convention for both class level and instance level attributes.
Currently, my own style brings a bit of the constant vs variable distinction into class and instance levels, such as this:
- Class level attributes meant to be read as constant or default values follow the constant convention: 
DEFAULT_VALUE. - Class level attributes meant to be shared and modified by any instance of the class or any inheriting class are also named following the constant conventions: 
COMMON_ATTRIBUTE. - Attributes defined directly by the instances and used/visible only by them follow the variable conventions: 
instance_attribute 
Here you have a very silly example showing these use cases:
class Parent(object):
    DEFAULT = 1
    COUNTER = 0    # counts times default value has been accessed
    def __init__(self, value=None):
        self.value = value or self.DEFAULT
    def is_default(self):
        return self.value is self.DEFAULT
    def get_value(self):
        if self.is_default():
            Parent.COUNTER += 1
        return self.value + self.COUNTER
class Child(Parent):
    """Use Parent's value + 1."""
    def __init__(self, value=None):
        self.value = (value or self.DEFAULT) + 1
And here's a (silly) use case:
>>> child = Child()
>>> child.is_default()
False
>>> parent = Parent(2)
>>> parent.is_default()
False
>>> default_parent = Parent()
>>> default_parent.is_default()
True
>>> child.get_value()
2
>>> parent.get_value()
2
>>> default_parent.get_value()
2
>>> child.get_value()
3
>>> default_parent.get_value()
3
>>> parent.get_value()
4
My question at the end is: Does this adhere to the (official) standards or is it violating any other convention that I may have overlooked?