On 01/04/2021 12.14, Chris Angelico wrote: > I think this code makes some sort of argument in the debate about > whether Python has too much flexibility or if it's the best > metaprogramming toolset in the world. I'm not sure which side of the > debate it falls on, though. > > class Building: > resource = None > @classmethod > def __init_subclass__(bldg): > super().__init_subclass__() > print("Building:", bldg.__name__) > def make_recipe(recip): > print(recip.__name__.replace("_", " "), "is made in a", > bldg.__name__.replace("_", " ")) > bldg.__init_subclass__ = classmethod(make_recipe) > > > class Extractor(Building): ... > class Refinery(Building): ... > > class Crude(Extractor): > resource = "Oil" > time: 1 > Crude: 1 > > class Plastic(Refinery): > Crude: 3 > time: 6 > Residue: 1 > Plastic: 2 > > class Rubber(Refinery): > Crude: 3 > time: 6 > Residue: 2 > Rubber: 2
[pauses for a moment, to let his mind unwind and return to (what passes as) 'reality'] Without looking into the details/context: surely there's a more straightforward approach? As to this, I'm slightly amused, but perhaps not in a good way: class Sanatorium( Building ): patient_name = "Chris" duration_of_treatment = "life" Thus, design suggestion: add a 'back-door' to the __init_subclass__ to ensure access to the Internet from any/all buildings! -- Regards, =dn -- https://mail.python.org/mailman/listinfo/python-list