Метод __get__ дескриптора в классе можно изменить или заменить, просто переопределив его в подклассе дескриптора.
Если метод класса - дескриптор только на чтение (т.е. имеет только метод __get__ без метода __set__), вы не можете изменить его значения, потому что он не имеет метода __set__, который позволяет установить новое значение.
Пример с классом и дескриптором:
```
class Descriptor:
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value = value
class MyClass:
attr = Descriptor()
my_obj = MyClass()
my_obj.attr = 42 # Устанавливаем значение через дескриптор
print(my_obj.attr) # Выводит 42
my_obj.attr = 100 # Здесь значение изменяется через дескриптор
print(my_obj.attr) # Выводит 100
```
Если вы хотите изменить поведение метода __get__ дескриптора, вы можете переопределить его в подклассе дескриптора и затем использовать новый класс-дескриптор вместо оригинального.
Пример:
```
class MyDescriptor:
def __get__(self, instance, owner):
print("Вызван пользовательский метод __get__")
return self.value
class MyClass:
attr = MyDescriptor()
my_obj = MyClass()
print(my_obj.attr) # Выводит "Вызван пользовательский метод __get__" и значение атрибута
```
При добавлении метода __get__ в его __dict__ не вызывается пользовательская функция, потому что метод __get__ является дескриптором и вызывается только при доступе к атрибуту через экземпляр класса. Если вы хотите вызвать пользовательскую функцию при доступе к атрибуту через экземпляр класса, вы можете переопределить метод __getattribute__ в классе, который будет вызываться при каждом доступе к атрибуту.
Пример:
```
class MyClass:
def __getattribute__(self, name):
print("Вызван пользовательский метод __getattribute__")
return object.__getattribute__(self, name)
my_obj = MyClass()
print(my_obj.attr) # Выводит "Вызван пользовательский метод __getattribute__" и значение атрибута
```