Почему Python запрещает дескрипторы цепочек `@classmethod` и`@property` с 3.13? Какое решение для собственности класса?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему Python запрещает дескрипторы цепочек `@classmethod` и`@property` с 3.13? Какое решение для собственности класса?

Сообщение Anonymous »


Отказ от ответственности < /strong>: я знаю, что уже есть похожие вопросы, но на мой вопрос больше фокусируется на причине решения, стоящего за решением, а не на самом решении. Если это считается дублированным, я удалю этот пост как можно скорее, но на самом деле я не хочу дублировать. Некоторые ответы предоставляют обходной путь, но я не могу понять, почему Python отключил цепочку @classmethod и @property . Есть ли какие -либо объяснения для этого? Сообщения, которые я прочитал, включают:

[*] Ответ, который указывает на то, что цепочка @classmethod и @property отключен с тех пор, как Python 3.13
Другое решение, которое определяет настройку ClassProperty . Но этот обходной путь не может предотвратить модификацию. Например, следующий код, полученный из исходного ответа, не поднимает исключение, когда будет предпринята попытка модификации в течение X < /code>.class classproperty(property):
def __get__(self, owner_self, owner_cls):
return self.fget(owner_cls)

def __set__(self, instance, value):
raise AttributeError("can't set attribute")

class C(object):
@classproperty
def x(cls):
return 1

print(C.x)
C.x = 2
print(C.x) # Output: 2
# no exception raised
# cannot prevent modification
< /code>
< /li>
Решение, написав свойство класса в MetaClass. Этот метод успешно предотвращает попытки модификации, но с помощью этого метода доступ к переменным класса будет возможен только через класс, а не через экземпляр.
class CMeta(type):
@property
def x(cls):
return 1

class C(object, metaclass=CMeta): ...

print(C.x)
# C.x = 2
# AttributeError: property 'x' of 'CMeta' object has no setter
# print(C().x)
# AttributeError: 'C' object has no attribute 'x'
< /code>
< /li>
< /ul>
Так есть ли определенный способ решить все вышеупомянутые проблемы и разрешить реализацию свойства класса, удовлетворяющую следующие два условия?>

Подробнее здесь: https://stackoverflow.com/questions/795 ... operty-sin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»