Динамически установить наследование в Python - PullRequest
1 голос
/ 22 июня 2010

У меня есть класс A, который должен наследовать класс B, имя которого еще не известно на момент написания A. Можно ли объявить A не наследующим что-либо и добавить B в качестве базового класса при создании экземпляра A? Пример:

Первый файл

class B:
  def __init__(self):
    self.__name = "Class B"

  def name(self):
    return self.__name

Второй файл

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.

1 Ответ

2 голосов
/ 22 июня 2010

Да, вы можете сделать это с помощью метаклассов. Это не самая простая тема, чтобы обернуть голову, но она сделает свою работу. У них есть Stack Overflow вопрос о них, который, похоже, содержит в себе некоторую полезную информацию, и я также нашел статью IBM , которая также может помочь. Где-то в официальной документации по Python есть раздел о них, но я не могу вспомнить, где именно это было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...