[PYTHON] Un moyen simple de mettre en cache la valeur dans le décorateur de propriété. En lecture seule. Notez qu'il conserve la mise en cache jusqu'à ce que l'objet soit supprimé.

def cached_ro_property(f):
    cache = [None]
    def _cached_ro_property(*args, **kargs):
        if cache[0]:
            return cache[0]
        cache[0] = f(*args, **kargs)
        return cache[0]
    return property(_cached_ro_property)


from django.test import TestCase
import mox


class TestCachedRoProperty(TestCase):
    """Test for cached_ro_property decorator."""
    
    def setUp(self):
        self.m = mox.Mox()

    def tearDown(self):
        self.m.UnsetStubs()
        self.m = None

    def test_call_1(self):
        """Simple call."""

        from decorators import cached_ro_property

        # Procuder function that should be called once.
        producer = self.m.CreateMockAnything()
        producer().AndReturn(30)

        class C(object):
            @cached_ro_property
            def f(self):
                return producer()

        self.m.ReplayAll()
        c = C()

        self.assertEqual(c.f, 30)
        self.assertEqual(c.f, 30)
        self.m.VerifyAll()

    def test_call_2(self):
        """Check that property function reference self."""

        from decorators import cached_ro_property

        # Procuder function that should be called once.
        producer = self.m.CreateMockAnything()
        producer().AndReturn(30)

        class C(object):
            @cached_ro_property
            def f(self):
                return self.g()
            def g(self):
                return producer()

        self.m.ReplayAll()
        c = C()

        self.assertEqual(c.f, 30)
        self.assertEqual(c.f, 30)
        self.m.VerifyAll()

Recommended Posts

Un moyen simple de mettre en cache la valeur dans le décorateur de propriété. En lecture seule. Notez qu'il conserve la mise en cache jusqu'à ce que l'objet soit supprimé.
Une raison simple pour laquelle la valeur de retour de round (2.675,2) est de 2,67 en python (elle devrait être de 2,68 en réalité ...)
Un simple serveur simulé qui incorpore simplement l'en-tête de la requête HTTP dans le corps de la réponse et le renvoie.
Créez une application simple qui intègre l'API Fetch pour les requêtes Ajax dans Flask et expliquez-la rapidement.
L'arrière-plan des caractères de l'image texte est surexposé pour faciliter la lecture.
Un script qui poursuit sa recherche jusqu'à ce que l'URL correspondante soit mise en signet avec Hatena Bookmark
[Note] Un script shell qui vérifie l'utilisation du processeur d'un processus spécifique dans une boucle while.