Константы классов Python в классах данных

Понимая, что приведенные ниже константы не являются истинными, пытаемся следовать PEP 8 Я хотел бы сделать «константу» в моем @dataclass в Python 3.7.

@dataclass
class MyClass:
    data: DataFrame

    SEED = 8675309  # Jenny's Constant

Раньше мой код был:

class MyClass:
    SEED = 8675309  # Jenny's Constant

    def __init__(data):
        self.data = data

Эквивалентны ли эти два вида обработки семян? Является ли сид теперь частью init / eq / hash? Есть ли предпочтительный стиль для этих констант?


person rhaskett    schedule 24.01.2020    source источник


Ответы (1)


Они одинаковые. dataclass игнорирует неаннотированные переменные при определении того, что использовать для генерации __init__ et al. SEED - это просто неотмеченный атрибут класса.

Если вы хотите предоставить подсказку типа для атрибута класса, вы используете typing.ClassVar, чтобы указать тип, чтобы dataclass не ошибочно принял его за атрибут экземпляра.

from dataclasses import dataclass
from typing import ClassVar


@dataclass
class MyClass:
    data: DataFrame
    SEED: ClassVar[int] = 8675309
person chepner    schedule 24.01.2020