Python Forum
dynamically creating a subclass
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
dynamically creating a subclass
#3
If you really need to convert strings, you could use a metaclass to collect the subclasses

class PetMeta(type):
    pet_classes = {}

    def __new__(cls, clsname, superclasses, attributedict):
        if clsname in cls.pet_classes:
            raise ValueError(
                "Redefinition of Pet subclass '{}'".format(clsname))
        tp = type.__new__(cls, clsname, superclasses, attributedict)
        cls.pet_classes[clsname] = tp
        return tp

def pet_class(name):
    return PetMeta.pet_classes[name]

class Person:
    def __init__(self, pet_types):
        self.pets = [pet_class(t)() for t in pet_types]

class Pet(metaclass=PetMeta): pass
class Dog(Pet): pass
class Cat(Pet): pass
class Bird(Pet): pass

john = Person(['Dog', 'Cat'])
print(john.pets)
The drawback of __subclasses__() is that it only knows direct subclasses.
Reply


Messages In This Thread
dynamically creating a subclass - by sidereal - Nov-16-2017, 07:16 PM
RE: dynamically creating a subclass - by nilamo - Jan-04-2018, 10:00 PM
RE: dynamically creating a subclass - by Gribouillis - Jan-04-2018, 11:10 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Subclass initialized property used in parent class method. Is it bad coding practice? saavedra29 5 1,859 Feb-07-2022, 07:29 PM
Last Post: saavedra29
Star Recursively convert nested dicts to dict subclass Alfalfa 1 2,923 Jan-22-2021, 05:43 AM
Last Post: buran
  use of subclass ebolisa 4 2,258 Sep-17-2020, 01:08 PM
Last Post: jefsummers
  Accessing subclass with a variable David_S 2 2,166 May-19-2020, 05:55 PM
Last Post: David_S
  How can I create a subclass of XlsxWriter? aquerci 2 2,102 May-04-2020, 07:41 PM
Last Post: aquerci
  Design Pattern for accessing subclass attributes UGuntupalli 2 2,117 Jul-30-2019, 11:09 PM
Last Post: UGuntupalli
  Help creating a class instance dynamically Kotevski 9 5,429 Aug-17-2018, 05:23 AM
Last Post: Gribouillis
  Creating folders dynamically with year/month/date sritsv 0 6,389 Oct-16-2017, 03:44 PM
Last Post: sritsv

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020