Edited because I'm a moron. Should have said class originally.
I have the code that does something like this:
file1.py
class A(object):
def __init__(self):
stuff_here()
class B(object):
def func(self):
self.a = A()
file2.py
import file1
class A(file1.A):
def __init__(self):
file1.A(self)
self.thing = other_thing
class B(file1.B):
pass
开发者_如何学Go
I would like that when I instantiate file2.B() it uses file2.A() for its member a, not file1.A()
Is there a way to do this? I tried looking at the python scoping rules but I'm misunderstanding it I think.
You could use a class attribute to hold the class you would like to use. In the first file, use
class B(object):
A = A
def func(self):
self.a = self.A()
and in the second file, use
class B(file1.B):
A = A
Probably there is a better way of achieving whatever you want to achieve...
Edit: Your comment to your question suggests that you don't want to actually change the code in the first file. In this case, you could try to "monkey patch" file1.py. Write file2.py as
import file1
class A(file1.A):
def __init__(self):
file1.A(self)
self.thing = other_thing
file1.A = A
Now you actually substituted file1.A by your own version. This is certainly hacky, but sometimes the quickest way to get somewhere.
Define a method in the parent that returns the class to use, and override it in the child.
加载中,请稍侯......
精彩评论