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.
-
2Can you explain why you need to do this?danben– danben2010年06月22日 14:48:57 +00:00Commented Jun 22, 2010 at 14:48
-
In this application I need to manipulate classes based on the application-specific metadata, not by regular class names.dpq– dpq2010年06月22日 15:03:39 +00:00Commented Jun 22, 2010 at 15:03
1 Answer 1
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.