Skip to content

Commit 3c2d36e

Browse files
authored
Merge pull request #8037 from radarhere/cached_property
2 parents 16cd358 + 33e304e commit 3c2d36e

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

src/PIL/GifImagePlugin.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import os
3131
import subprocess
3232
from enum import IntEnum
33+
from functools import cached_property
3334

3435
from . import (
3536
Image,
@@ -112,8 +113,7 @@ def _open(self) -> None:
112113

113114
self._fp = self.fp # FIXME: hack
114115
self.__rewind = self.fp.tell()
115-
self._n_frames = None
116-
self._is_animated = None
116+
self._n_frames: int | None = None
117117
self._seek(0) # get ready to read first frame
118118

119119
@property
@@ -128,24 +128,23 @@ def n_frames(self):
128128
self.seek(current)
129129
return self._n_frames
130130

131-
@property
132-
def is_animated(self):
133-
if self._is_animated is None:
134-
if self._n_frames is not None:
135-
self._is_animated = self._n_frames != 1
136-
else:
137-
current = self.tell()
138-
if current:
139-
self._is_animated = True
140-
else:
141-
try:
142-
self._seek(1, False)
143-
self._is_animated = True
144-
except EOFError:
145-
self._is_animated = False
146-
147-
self.seek(current)
148-
return self._is_animated
131+
@cached_property
132+
def is_animated(self) -> bool:
133+
if self._n_frames is not None:
134+
return self._n_frames != 1
135+
136+
current = self.tell()
137+
if current:
138+
return True
139+
140+
try:
141+
self._seek(1, False)
142+
is_animated = True
143+
except EOFError:
144+
is_animated = False
145+
146+
self.seek(current)
147+
return is_animated
149148

150149
def seek(self, frame: int) -> None:
151150
if not self._seek_check(frame):

0 commit comments

Comments
 (0)