编辑因为我是个白痴。本来应该说课。
我有这样的代码:
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
我希望当我实例化file2.B()时,它使用file2.A()作为其成员a,而不是file1.A()
有办法做到这一点吗?我试着查看python范围规则,但我认为我误解了它。
答案 0 :(得分:1)
您可以使用class属性来保存您想要使用的类。在第一个文件中,使用
class B(object):
A = A
def func(self):
self.a = self.A()
并在第二个文件中,使用
class B(file1.B):
A = A
可能有更好的方式来实现你想要实现的任何目标......
修改:您对问题的评论表明您不希望实际更改第一个文件中的代码。在这种情况下,您可以尝试“猴子补丁”file1.py
。将file2.py
写为
import file1
class A(file1.A):
def __init__(self):
file1.A(self)
self.thing = other_thing
file1.A = A
现在您实际上用您自己的版本替换了file1.A
。这肯定是hacky,但有时是到达某个地方的最快方式。
答案 1 :(得分:0)
在父级中定义一个方法,该方法返回要使用的类,并在子级中覆盖它。