# Atrybuty klas vs. atrybuty instancji
# (trochę mniej generyczne nazwy klasy i atrybutów niż na wykładzie)

class Dog:
    genus = 'Canis'

    def __init__(self, name):
        self.name = name

    def woof(self):
        print('{}: "Woof!"'.format(self.name))


lassie = Dog('Lassie')
dogmeat = Dog('Dogmeat')

print(lassie.name)
print(dogmeat.name)
lassie.woof()
dogmeat.woof()

print(lassie.genus)
print(dogmeat.genus)

dogmeat.genus = 'Not Canis'
dogmeat.name = 'Sneaky Dogmeat'

print(lassie.genus)
print(dogmeat.genus)

lassie.puppies = 2
print(lassie.puppies)
# print(dogmeat.puppies) # AttributeError: 'Dog' object has no attribute 'puppies'

Dog.family = 'Canidae'
print(lassie.family)
print(dogmeat.family)
