1- from dataclasses import dataclass , astuple
2- from typing import Set , Any
1+ from dataclasses import dataclass
2+ from typing import Set
33
44
5- @dataclass (frozen = True , repr = False , eq = False )
5+ @dataclass (frozen = True , repr = False )
66class ValueObject :
77 def __repr__ (self ) -> str :
88 return "<{}: {}>" .format (self .__class__ .__name__ , self )
99
10- # We use a custom __eq__ method to enforce the liskov principle.
11- # e.g. SpecialModule("foo") == Module("foo") where SpecialModule is a subclass of Module.
12- def __eq__ (self , other : Any ) -> bool :
13- if isinstance (other , type (self )) or isinstance (self , type (other )):
14- return hash (self ) == hash (other )
15- else :
16- return False
17-
18- def __hash__ (self ) -> int :
19- return hash (astuple (self ))
20-
2110
22- @dataclass (frozen = True , repr = False , eq = False )
11+ @dataclass (frozen = True , repr = False )
2312class Module (ValueObject ):
2413 """
2514 A Python module.
@@ -61,7 +50,7 @@ def is_descendant_of(self, module: "Module") -> bool:
6150 return self .name .startswith (f"{ module .name } ." )
6251
6352
64- @dataclass (frozen = True , repr = False , eq = False )
53+ @dataclass (frozen = True , repr = False )
6554class DirectImport (ValueObject ):
6655 """
6756 An import between one module and another.
@@ -76,7 +65,7 @@ def __str__(self) -> str:
7665 return f"{ self .importer } -> { self .imported } (l. { self .line_number } )"
7766
7867
79- @dataclass (frozen = True , repr = False , eq = False )
68+ @dataclass (frozen = True , repr = False )
8069class Layer (ValueObject ):
8170 """
8271 A layer within a layered architecture.
0 commit comments