Python继承和范围问题

时间:2011-03-07 17:46:17

标签: python

编辑因为我是个白痴。本来应该说课。

我有这样的代码:

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范围规则,但我认为我误解了它。

2 个答案:

答案 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)

在父级中定义一个方法,该方法返回要使用的类,并在子级中覆盖它。