In this example you said Wrong use of class variable, because it can be accessed by any instance
class Player:
teamName = 'Liverpool' # class variables
formerTeams = [] # wrong use of class variables
def __init__(self, name):
self.name = name # creating instance variables
p1 = Player('Mark')
p1.formerTeams.append('Barcelona')
p2 = Player('Steve')
p2.formerTeams.append('Chelsea')
print("Name:",p1.name)
print("Team Name:",p1.teamName)
print(p1.formerTeams)
print("Name:",p2.name)
print("Team Name:",p2.teamName)
print(p2.formerTeams)
and here you said “used class variable smartly” but it is still can be accessed by any instance of class
class Player:
teamName = 'Liverpool' # class variables
teamMembers = []
def __init__(self, name):
self.name = name # creating instance variables
self.formerTeams = []
self.teamMembers.append(self.name)
p1 = Player('Mark')
p2 = Player('Steve')
print("Name:",p1.name)
print("Team Members:")
print(p1.teamMembers)
print("")
print("Name:",p2.name)
print("Team Members:")
print(p2.teamMembers)
p3 = Player('John doe')
print(p3.teamMembers)
p3.teamMembers.remove('Mark')
print(p3.teamMembers)