@@ -40,17 +40,18 @@ def _get_class(cls: type) -> schema.Class:
4040 if len ({g for g in (getattr (b , f"{ schema .inheritable_pragma_prefix } group" , None )
4141 for b in cls .__bases__ ) if g }) > 1 :
4242 raise schema .Error (f"Bases with mixed groups for { cls .__name__ } " )
43- if any (getattr (b , "_null" , False ) for b in cls .__bases__ ):
44- raise schema .Error (f"Null class cannot be derived" )
4543 pragmas = {
4644 # dir and getattr inherit from bases
4745 a [len (schema .inheritable_pragma_prefix ):]: getattr (cls , a )
4846 for a in dir (cls ) if a .startswith (schema .inheritable_pragma_prefix )
4947 }
5048 pragmas |= cls .__dict__ .get ("_pragmas" , {})
49+ derived = {d .__name__ for d in cls .__subclasses__ ()}
50+ if "null" in pragmas and derived :
51+ raise schema .Error (f"Null class cannot be derived" )
5152 return schema .Class (name = cls .__name__ ,
5253 bases = [b .__name__ for b in cls .__bases__ if b is not object ],
53- derived = { d . __name__ for d in cls . __subclasses__ ()} ,
54+ derived = derived ,
5455 pragmas = pragmas ,
5556 # in the following we don't use `getattr` to avoid inheriting
5657 properties = [
@@ -150,11 +151,11 @@ def load(m: types.ModuleType) -> schema.Schema:
150151 f"Only one root class allowed, found second root { name } " )
151152 cls .check_types (known )
152153 classes [name ] = cls
153- if getattr (data , "_null" , False ):
154+ if "null" in cls .pragmas :
155+ del cls .pragmas ["null" ]
154156 if null is not None :
155157 raise schema .Error (f"Null class { null } already defined, second null class { name } not allowed" )
156158 null = name
157- cls .is_null_class = True
158159
159160 _fill_synth_information (classes )
160161 _fill_hideable_information (classes )
0 commit comments