Ссылка Python dataclasses.dataclass на переменную вместо переменной экземпляраPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ссылка Python dataclasses.dataclass на переменную вместо переменной экземпляра

Сообщение Anonymous »

В следующем коде значения по умолчанию в определении класса Container должны создавать новые переменные экземпляра для c1.a и c2.a.
Вместо этого похоже, что c1.a и c2.a ссылаются на одну и ту же переменную.
Создает ли @dataclass переменная класса? Кажется, это не соответствует предполагаемой функциональности, и я не могу найти ничего о переменных класса в документации.
Поэтому я думаю, что это ошибка. Может кто-нибудь объяснить мне, как это исправить? Должен ли я сообщить об этом как об ошибке в трекере Python?
Я знаю, что эта проблема должна быть связана с тем, как Python передает объекты по ссылке и встроенные типы по значению, поскольку b (это просто число с плавающей запятой) показывает ожидаемое/желаемое поведение, тогда как атрибут a (который является определяемым пользователем объектом) является просто ссылка.
Спасибо!
Код:
from dataclasses import dataclass

@dataclass
class VS:
v: float # value
s: float # scale factor

def scaled_value(self):
return self.v*self.s

@dataclass
class Container:
a: VS = VS(1, 1)
b: float = 1

c1 = Container()
c2 = Container()

print(c1)
print(c2)

c1.a.v = -999
c1.b = -999

print(c1)
print(c2)

Выходы:
Container(a=VS(v=1, s=1), b=1)
Container(a=VS(v=1, s=1), b=1)
Container(a=VS(v=-999, s=1), b=-999)
Container(a=VS(v=-999, s=1), b=1)


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • В чем магия подсказки типа декоратора dataclass модуля dataclasses?
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как получить хорошие типы из `dataclass` Python без создания экземпляра класса
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Python @dataclasses (slots = true) ломает Super ()
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Python @dataclasses (slots = true) ломает Super ()
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как создать «динамические» типы Python от членов DataClasses?
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

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