Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 25, 2010 16:01:29

Thanatoz
От:
Зарегистрирован: 2010-09-25
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как прокастит один класс в другой

суть проблемы. есть два класса

class commonClass(object):
def __init__(self):
pass

def method(self):
pass

class subClass(commonClass):
def __init__(self):
pass

def otherMethod(self):
pass
в результате выполнения кода я получаю объект класса commonClass.
object = commonClass()

Мне из него нужно получить subClass, чтобы использовать методы класса subClass.otherMethod()

Как это сделать?



Офлайн

#2 Сен. 25, 2010 16:49:58

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Как прокастит один класс в другой

Зависит от ситуации, но для простых случаев вроде должно работать…

class commonClass(object):
def __init__(self):
self.x = 1

def method(self):
print 'one'

class subClass(commonClass):
def __init__(self):
pass

def otherMethod(self):
print 'other'

def to_sub(obj, Sub):
buf = Sub()
objd = obj.__dict__
for key in objd:
setattr(buf, key, objd[key])
return buf

a = commonClass()
a = to_sub(a, subClass)
a.otherMethod()
other
In : a.x
Out: 1



Отредактировано (Сен. 25, 2010 16:56:11)

Офлайн

#3 Сен. 25, 2010 22:42:30

Thanatoz
От:
Зарегистрирован: 2010-09-25
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как прокастит один класс в другой

спасибо



Офлайн

#4 Сен. 25, 2010 23:57:16

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Как прокастит один класс в другой

class commonClass(object):
def __getstate__(self):
return dict(foo = self.foo)

class subClass(commonClass):
def __setstate__(self, state):
self.foo = state['foo']
Всё остальное – хак :-).

Пример хака:
>>> object = commonClass()
>>> object.otherMethod()
Traceback (most recent call last):
...
AttributeError: 'commonClass' object has no attribute 'otherMethod'
>>> subClass.otherMethod(object)
Traceback (most recent call last):
...
TypeError: unbound method otherMethod() must be called with subClass instance as first argument (got commonClass instance instead)
>>> isinstance(object, commonClass)
True
>>> isinstance(object, subClass)
False
>>> object.__class__ = subClass
>>> object.otherMethod()
>>> isinstance(object, commonClass)
True
>>> isinstance(object, subClass)
True
..bw



Отредактировано (Сен. 26, 2010 00:05:41)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version