Reputation: 9268
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.
Upvotes: 1
Views: 239
Reputation: 7864
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.
Upvotes: 2