Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 21, 2009 22:52:01

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Динамическая замена родительского класса.

Класс А наследуется от класса В, как динамически (те не меня исходник) заменить чтобы класс А наследовался от класса С и создать объект? те выполнить динамически подмену родителя B.

class B:
pass

class С:
pass

class A(B):
pass

#do something

i = A() #получить объект класса А наследованного от С

можно сделать такое?



Офлайн

#2 Сен. 21, 2009 23:05:18

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Динамическая замена родительского класса.

Так сделать нельзя, насколько мне известно. А зачем?
Можно использовать множественное наследование.

Офлайн

#3 Сен. 21, 2009 23:19:21

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Динамическая замена родительского класса.

Ну это на самом деле вот этот вопрос только в отвязке от джанги):

А что с множественным наследованием? мне нужно чтобы все методы класса С перекрыли все методы класса В ..



Офлайн

#4 Сен. 21, 2009 23:48:53

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Динамическая замена родительского класса.

>>> class A(object):
... pass
...
>>> class B(object):
... pass
...
>>> class C(A):
... pass
...
>>> C.__bases__
(<class '__main__.A'>,)
>>> C.__bases__ = (B,)
>>> C.__bases__
(<class '__main__.B'>,)



Офлайн

#5 Сен. 22, 2009 00:14:09

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Динамическая замена родительского класса.

Ух ты круто, работает!) Спасибо!



Офлайн

#6 Сен. 22, 2009 03:04:48

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Динамическая замена родительского класса.

Замечу в скобках, что это - довольно таки грязный хак. И злоупотреблять им не стоит.



Офлайн

#7 Сен. 22, 2009 11:20:00

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Динамическая замена родительского класса.

Андрей Светлов
Замечу в скобках, что это - довольно таки грязный хак. И злоупотреблять им не стоит.
Я там джангу патчил просто на multidb. все лучше чем ее исходник править.



Офлайн

#8 Сен. 22, 2009 13:56:12

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Динамическая замена родительского класса.

Андрей Светлов
Да, это очень сильное колдунство.

Офлайн

#9 Сен. 22, 2009 17:35:06

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Динамическая замена родительского класса.

Змеиная гибкость. Но, вроде, это противоречит самому ООП.



Офлайн

#10 Сен. 23, 2009 02:07:20

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Динамическая замена родительского класса.

Не делайте из ООП идола. С точки зрения java-style очень многие вещи, начиная со свободных функций - этому ООП противоречат.
И ничего. К счастью, Питон - мультипарадигменный язык.
Другое дело, что во главу угла стоит ставить читабельность кода.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version