@oslik_ppc

Как заменить дескриптор __get__ метода класса?

Почему, если метод класса - дескриптор только на чтение (т.е. у него есть __get__, но нет __set__) я не могу изменить его?
Т.е. если сделать:
print(dir(Cls.my_meth))
там будет __get__, но заменить его никак нельзя. Т.е. код:
test_class_instance.my_method() #первая
TestCls.my_meth.__get__(test_class_instance, TestCls)()#вторая

И первая и вторая строка, по сути, вроде как равнозначны?

Но запись вида:
class TestCls:
    def __init__(self):
        self.val = 5

    def my_meth(self):
        print(f"my_meth.called({self.val})")


def custom_get(*params):
    print(f"my_func_get({params})")

setattr(TestCls.my_meth, "__get__", custom_get)

created_cls = TestCls()
created_cls.my_meth()  # нет вызова __get__ (custom_get)


Не вызывает custom_get(...), просто добавляя его в __dict__ метода.
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы