In [ ]:
    
class Adam(): pass
class Ewa(): pass
class Eugeniusz(Adam, Ewa): pass
class Genowefa(Adam, Ewa): pass
class Maksymilian(Adam, Ewa): pass
class Agnieszka(Adam, Ewa): pass
class Marek(Eugeniusz, Genowefa): pass
class Henryka(Maksymilian, Agnieszka): pass
class Andrzej(Marek, Henryka): pass
help(Andrzej)
Andrzej.mro()
    
superclassname.mro() i help(classname)
In [ ]:
    
class DostawcaBrazu(object):
    def pobierz_material(self):
        return "Braz"
        
class Kowal():
    
    def stworz(self, *przedmioty):
        material = DostawcaBrazu().pobierz_material()
        print("Zaczynam prace")
        for przedmiot in przedmioty:
            print("wykuwam z {0}: ".format(material), przedmiot)
        print("Skonczylem prace")
            
Kowal().stworz("tarcza", "miecz")
    
In [ ]:
    
class DostawcaBrazu(object):
    def pobierz_material(self):
        return "Braz"
        
class Kowal(object):
    
    def stworz(self, *przedmioty):
        material = super().pobierz_material()
        print("Zaczynam prace")
        for przedmiot in przedmioty:
            print("wykuwam z {0}: ".format(material), przedmiot)
        print("Skonczylem prace")
        
class BrazKowal(Kowal, DostawcaBrazu): 
    pass
            
BrazKowal().stworz("tarcza", "miecz")
    
In [ ]:
    
class DostawcaStali(object):
    
    def pobierz_material(self):
        return "Stal"
        
        
class StalowyKowal(Kowal, DostawcaStali):
    pass
StalowyKowal().stworz("tarcza", "miecz", "zbroja")
    
In [ ]:
    
import requests
class PodstawoweOperacje():
    
    def pobierz_dane_z_internetu(self):
        return requests.get(url="http://www.trojmiasto.pl")
        
    def parsuj_dane(self, dane):
        print("Parsuje dane")
        print(dane)
        return "Dane sparsowane"
        
        
class WykonajAsynchronicznaOperacje(PodstawoweOperacje):
    
    def wykonaj(self):
        dane = super().pobierz_dane_z_internetu()
        super().parsuj_dane(dane)
        
WykonajAsynchronicznaOperacje().wykonaj()
    
In [ ]:
    
import requests
class MockPodstawowychOperacji(PodstawoweOperacje):
    
    def pobierz_dane_z_internetu(self):
        return "Dane z internetuj"
        
    def parsuj_dane(self, dane):
        print("Parsuje dane")
        print(dane)
        return "Dane sparsowane"
        
        
class MockWykonajAsynchronicznaOperacje(WykonajAsynchronicznaOperacje, MockPodstawowychOperacji):
    pass
        
MockWykonajAsynchronicznaOperacje().wykonaj()
    
In [ ]:
    
class DoKwadratuMixin():
    
    def do_kwadratu(self, liczba):
        return liczba ** 2
    
class ObiektMatematyczny(DoKwadratuMixin):
    pass
print(ObiektMatematyczny().do_kwadratu(4))
    
In [ ]:
    
class ModelCacheMixin(object):
    CACHE_PREFIX = None
    @classmethod
    def set_cache(cls, id, value, timeout=30*60):
        cache.set(cls.CACHE_PREFIX % id, value, timeout=timeout)
    @classmethod
    def get_cached(cls, id, timeout=30*60):
        cached_object = cache.get(cls.CACHE_PREFIX % id)
        if cached_object:
            return cached_object
        else:
            entity = cls.objects.get(id=id)
            cls.set_cache(id, entity, timeout=timeout)
            return entity
    @classmethod
    def get_cache(cls, id):
        return cache.get(cls.CACHE_PREFIX % id)
    @classmethod
    def get_cached_or_none(cls, id):
        try:
            return cls.get_cached(id)
        except cls.DoesNotExist:
            return None
    @classmethod
    def get_cached_or_404(cls, id):
        try:
            return cls.get_cached(id)
        except cls.DoesNotExist:
            raise Http404()
    @classmethod
    def cache_delete(cls, id):
        cache.delete(cls.CACHE_PREFIX % id)