Как преобразовать (наследовать) родительский в дочерний класс?

Я хотел бы знать, как преобразовать родительский объект, который был возвращен некоторой функцией дочернему классу.

class A(object): def __init__(): pass class B(A): def functionIneed(): pass i = module.getObject()# i will get object that is class A j = B(i)# this will return exception j.functionIneed() 

Я не могу изменить класс A. Если бы я мог бы реализовать функцию Ineed для класса A, но это невозможно из-за структуры кода. благодаря

4 Solutions collect form web for “Как преобразовать (наследовать) родительский в дочерний класс?”

Python не поддерживает «кастинг». Вам нужно будет написать B.__init__() чтобы он мог взять A и инициализировать его соответствующим образом.

У меня есть сильное подозрение, нет, убеждение, что в вашем проекте программы есть что-то ужасное, что оно требует от вас этого. В Python, в отличие от Java, очень мало проблем требуют, чтобы классы решались. Если вам нужна функция, просто определите ее:

 def function_i_need(a): """parameter a: an instance of A""" pass # do something with 'a' 

Однако, если я не могу отговорить вас от того, чтобы ваша функция была методом класса, вы можете изменить класс экземпляра, установив свой атрибут __class__ :

 >>> class A(object): ... def __init__(self): ... pass ... >>> class B(A): ... def functionIneed(self): ... print 'functionIneed' ... >>> a = A() >>> a.functionIneed() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'A' object has no attribute 'functionIneed' >>> a.__class__ = B >>> a.functionIneed() functionIneed 

Это будет работать до тех пор, пока B не имеет метода __init__ , поскольку, очевидно, __init__ никогда не будет вызван.

Вы сказали, что хотите реализовать что-то вроде этого:

 class B(A): def functionIneed(): pass 

Но на самом деле то, что вы делаете, – это нечто подобное (если только вы не намеревались сделать класс или статический метод в первую очередь):

 class B(A): def functionIneed(self): pass 

Затем вы можете вызвать B.functionIneed(instance_of_A) . (Это одно из преимуществ того, чтобы self явно передавал методы ).

Как насчет:

 i = module.getObject() # i will get object that is class A try: i.functionIneed() except AttributeError: # handle case when u have a bad object 

Читайте на утиной печати.

  • Операция импорта внутри определения класса / функции - это хорошая идея?
  • Python экземпляры и атрибуты: это ошибка, или я понял, что это совершенно неправильно?
  • Наследование класса Python AttributeError - почему? как исправить?
  • Pythonic альтернатива (вложенным) словарям с теми же ключами?
  • Использование класса Python в качестве контейнера данных
  • Мне нужен класс Python, который отслеживает, сколько раз он создается
  • Python: как сохранить список с объектами в файле?
  • Независимые экземпляры «случайных»
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.