开发者

Python inheritance and scoping question

开发者 https://www.devze.com 2023-02-15 13:33 出处:网络
Edited because I\'m a moron. Should have said class originally. I have the code that does something like this:

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号