@YaroslavS

Как получить доступ к свойствам класса, к объекту которого присоединен метод другого класса?

Здравствуйте. Имеется 2 класса cl и test в классе cl есть метод. Допустим я присваиваю объекту класса test метод класса cl. Есть ли возможность получить доступ к свойствам класса test из данного метода?
class cl(object):
    prop = 10
    def funk(self):
        print(self.prop)

        
class test(object):
    prop = 20   

 
obj = cl()
testobj = test()
testobj.f = obj.funk
testobj.f()

результат 10
а надо 20
  • Вопрос задан
  • 1050 просмотров
Решения вопроса 1
Я вас убедительно прошу, не делайте так.

import types


class CL(object):
    prop = 10

    def funk(self):
        print(self.prop)


class Test(object):
    prop = 20


if __name__ == '__main__':
    obj = CL()
    testobj = Test()
    testobj.f = types.MethodType(obj.funk.__func__, testobj)
    testobj.f()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alexclear
@alexclear
A cat
Какую высокоуровневую задачу Вы пытаетесь решить таким образом?
То, что Вы пытаетесь сделать, невозможно, метод существует не в контексте конкретного объекта, а в контексте класса. После того, как Вы делаете

testobj.f = obj.funk

testobj.f уже не имеет отношения к полям объекта obj. Вызов метода объекта можно рассматривать как применение метода к конкретному объекту (считайте, что это еще один имплиситный параметр метода), так вот, у вызова testobj.f() уже нет информации об obj, в качестве имплиситного параметра в f попадет testobj. - здесь написана фигня, смотрите комментарии.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы