как мне создавать экземпляры объекта во время выполнения в python?
скажем, у меня есть 2 класса:
class MyClassA(object):
def __init__(self, prop):
self.prop = prop
self.name = "CLASS A"
def println(self):
print self.name
class MyClassB(object):
def __init__(self, prop):
self.prop = prop
self.name = "CLASS B"
def println(self):
print self.name
и dict
{('a': MyClassA), ('b': MyClassB)}
как я могу создать динамический экземпляр одного из моих двух классов, в зависимости от того, как я выбираю "a" или "b".
вид этого:
somefunc(str):
if 'a': return new MyClassA
if 'b': return new MyClassB
чтобы получить "КЛАСС B" при вызове: somefunc('a').println
но более элегантным и динамичным способом (скажем, я добавляю больше классов в dict во время выполнения)
Вы можете создать диспетчер, который представляет собой словарь с отображением ключей для классов.
dispatch = {
"a": MyClassA,
"b": MyClassB,
}
instance = dispatch[which_one]() # Notice the second pair of parens here!
Вы создаете экземпляр класса, вызывая класс. Ваш класс dict {('a': MyClassA), ('b': MyClassB)}
возвращает классы; поэтому вам нужно только вызвать класс:
classes['a']()
Но я понимаю, что вам нужно что-то более конкретное. Здесь подкласс dict
, который при вызове с ключом просматривает связанный элемент и вызывает его:
>>> class ClassMap(dict):
... def __call__(self, key, *args, **kwargs):
... return self.__getitem__(key)(*args, **kwargs)
...
>>> c = ClassMap()
>>> c['a'] = A
>>> c['b'] = B
>>> c('a')
<__main__.A object at 0x1004cc7d0>