In Python, what's the correct way to instantiate a class from a variable?
-
19-09-2019 - |
Question
Suppose that I have class C
.
I can write o = C()
to create an instance of C
and assign it to o
.
However, what if I want to assign the class itself into a variable and then instantiate it?
For example, suppose that I have two classes, such as C1
and C2
, and I want to do something like:
if (something):
classToUse = C1
else:
classToUse = C2
o = classToUse.instantiate()
What's the syntax for the actual instantiate()
? Is a call to __new__()
enough?
Solution
o = C2()
This will accomplish what you want. Or, in case you meant to use classToUse, simply use:
o = classToUse()
Hope this helps.
OTHER TIPS
You're almost there. Instead of calling an instantiate() method, just call the variable directly. It's assigned to the class, and classes are callable:
if (something):
classToUse = C1
else:
classToUse = C2
o = classToUse()
It's simple, Python don't recognize where a varible is a class or function. It's just call that value.
class A:
pass
B=A
b=B()
A class is an object just like anything else, like an instance, a function, a string... a class is an instance too. So you can store it in a variable (or anywhere else that you can store stuff), and call it with () no matter where it comes from.
def f(): print "foo"
class C: pass
x = f
x() # prints foo
x = C
instance = x() # instanciates C