'Why have a class with both a class variable and an instance variable of the same name?

I've seen a few snippets of code in different languages where a class has a class variable, but then in the same class, there's also an instance variable of the same name. I'm trying to understand why we would do this? What would be the benefits of doing something like this:

class Paint:

    colour = 'red'

    def __init__(self, name, counter):        
        self.id = name        
        self.colour = colour

This is in Python and just an example. I'm trying to understand the benefits, and why someone would do this, in any programming language, but particularly C++, ruby, and python.



Solution 1:[1]

where a class has a class variable, but then in the same class there's also an instance variable of the same name.

Class variable or member variable allocates the memory of that variable for every single object of the same class. It may or may not have default value, like the colour = 'red' in your example.

Instance variable is specific to individual object of that class. Every single object must initialise that instance variable in some way, or optionally having default value.

Solution 2:[2]

Define default values:

class C:
    x = 1

    def __init__(self, x = None):
        if x is None:
            self.x = self.x
        else:
            self.x = x
    
c1 = C()
print(c1.x) # 1
c2 = C(2)
print(c2.x) # 2

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 artm
Solution 2 Yas