Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 15, 2010 11:40:59

gkraser
От:
Зарегистрирован: 2007-08-25
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление метода в класс

Как добавить метод, определенный в одном классе, к другому, существующему классу. Например:

class Z1(object):
def __init__(self):
self.a=123

class Z2(object):
def mm(self):
print self.a

Z1.m1=Z2.mm
z=Z1()
z.m1()
В этом случае - ошибка: TypeError: unbound method mm() must be called with Z2 instance as first argument (got nothing instead)

Присвоение функции в качестве метода работает:
def mm(self):
print self.a

Z1.m1=mm
z=Z1()
z.m1()
Вот как сделать из ‘unbound method’ обычную функцию?



Офлайн

#2 Июнь 15, 2010 12:34:22

gkraser
От:
Зарегистрирован: 2007-08-25
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление метода в класс

Все, я уже нашел как:

Z1.m1=Z2.mm.__func__



Офлайн

#3 Июнь 15, 2010 14:06:24

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Добавление метода в класс

Вы не должны хотеть этого делать.



Офлайн

#4 Июнь 15, 2010 14:26:08

gkraser
От:
Зарегистрирован: 2007-08-25
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление метода в класс

Daevaorn
Вы не должны хотеть этого делать.
В смысле?



Офлайн

#5 Июнь 15, 2010 14:50:03

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Добавление метода в класс

Если у вас возникла данная задача, что вы что-то делаете или проектируете не так.



Офлайн

#6 Июнь 15, 2010 14:50:40

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Добавление метода в класс

Это не правильно и не очень сочетается с дизайном языка.
ИМХО, ты что-то перемудрил и надо искать другой подход.



Офлайн

#7 Июнь 15, 2010 15:01:05

gkraser
От:
Зарегистрирован: 2007-08-25
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление метода в класс

Вообще-то это для DSL. Например:

class Car(object):
class Motor(DefaultMotor):
objem=5

class Car2(Car):
class Motor:
objem=4
В этом случае мне нужно, что бы Car2.Motor был унаследован от Car.Motor. Однако писать явного предка - это писать лишнее (ибо таких внутренних классов - несколько). Вот и ищу выход. В данном случае, например, метакласс для Car создаст новый класс для Car2.Motor, унаследованный от Car.Motor и заполнит его атрибутами из Car2.Motor. Сымитирует наследование. Как-то вот для такого…



Отредактировано (Июнь 15, 2010 15:01:53)

Офлайн

#8 Июнь 15, 2010 15:06:05

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Добавление метода в класс

gkraser
Как-то вот для такого…
Это хороший повод подумать над другими вариантами вашего “языка”.



Офлайн

#9 Июнь 15, 2010 15:48:05

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Добавление метода в класс

Хм… Читать про метаклассы, наверное. В этом случае, как мне кажется, должно быть в тему.
Хотя фиг его знает… Надо ближе смотреть.



Офлайн

#10 Июнь 15, 2010 18:49:23

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Добавление метода в класс

может использовать один класс мотор но зашить в него разные режимы (тип мотора)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version