Skip to content

Commit dbcfad2

Browse files
committed
v2: Algorithm - don't initialize nn.Module if it already was initialized
Necessary to permit clean diamond inheritance, as nn.Module.__init__ uses setattr and overwrites members
1 parent 8ed4fa2 commit dbcfad2

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

tianshou/algorithm/algorithm_base.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,13 @@ def __init__(
450450
policy: TPolicy,
451451
) -> None:
452452
""":param policy: the policy"""
453-
super().__init__()
453+
module_already_initialized = hasattr(self, "_modules")
454+
if not module_already_initialized:
455+
super().__init__()
456+
else:
457+
logger.debug(
458+
f"Not initializing nn.Module in {self.__class__.__name__} since it is already initialized (probably due to diamond inheritance)."
459+
)
454460
self.policy: TPolicy = policy
455461
self.lr_schedulers: list[LRScheduler] = []
456462
self._optimizers: list["Algorithm.Optimizer"] = []

0 commit comments

Comments
 (0)