Dynamically set inheritance in Python
I have class A
that is supposed to inherit class B
whose name is not yet known at the time of A
being written. Is it possible to declare A
开发者_如何学运维not inheriting anything, and add B
as the base class during A
's instantiation? Example:
First file
class B:
def __init__(self):
self.__name = "Class B"
def name(self):
return self.__name
Second file
class A:
def __init__(self):
self.__name = "Class A"
# At some point here, the appropriate module name and location is discovered
import sys
sys.path.append(CustomModulePath)
B = __import__(CustomModuleName)
magic(A, B) # TODO What should magic() do?
a = A()
print a.name() # This will now print "Class A", since name() is defined in B.
Yeah, you can accomplish this with metaclasses. It's not the easiest topic to wrap your head around but it'll do the job. There's a Stack Overflow question about them that looks like it has some good information and I also found an IBM article that might help as well. Somewhere in the official Python documentation, there's a section about them but I can't recall exactly where offhand.
精彩评论