Найти - Пользователи
Полная версия: Добавление метода в класс
Начало » Python для новичков » Добавление метода в класс
1 2
gkraser
Как добавить метод, определенный в одном классе, к другому, существующему классу. Например:
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’ обычную функцию?
gkraser
Все, я уже нашел как:

Z1.m1=Z2.mm.__func__
Александр Кошелев
Вы не должны хотеть этого делать.
gkraser
Daevaorn
Вы не должны хотеть этого делать.
В смысле?
Александр Кошелев
Если у вас возникла данная задача, что вы что-то делаете или проектируете не так.
ZZZ
Это не правильно и не очень сочетается с дизайном языка.
ИМХО, ты что-то перемудрил и надо искать другой подход.
gkraser
Вообще-то это для 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. Сымитирует наследование. Как-то вот для такого…
Александр Кошелев
gkraser
Как-то вот для такого…
Это хороший повод подумать над другими вариантами вашего “языка”.
ZZZ
Хм… Читать про метаклассы, наверное. В этом случае, как мне кажется, должно быть в тему.
Хотя фиг его знает… Надо ближе смотреть.
o7412369815963
может использовать один класс мотор но зашить в него разные режимы (тип мотора)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB