Python Dataclass и декоратор свойств - PullRequest
0 голосов
/ 28 июня 2018

Я читал класс данных Python 3.7 как альтернативу именованным кортежам (что я обычно использую, когда приходится группировать данные в структуре). Мне было интересно, совместим ли dataclass с декоратором свойств для определения функций получения и установки для элементов данных класса данных. Если так, это где-то описано? Или есть примеры?

1 Ответ

0 голосов
/ 28 июня 2018

Это точно работает:

from dataclasses import dataclass

@dataclass
class Test:
    _name: str="schbell"

    @property
    def name(self) -> str:
        return self._name

    @name.setter
    def name(self, v: str) -> None:
        self._name = v

t = Test()
print(t.name) # schbell
t.name = "flirp"
print(t.name) # flirp
print(t) # Test(_name='flirp')

На самом деле, почему бы и нет? В конце концов, вы получите просто старый добрый класс, производный от типа:

print(type(t)) # <class '__main__.Test'>
print(type(Test)) # <class 'type'>

Может быть, поэтому свойства нигде конкретно не упоминаются. Тем не менее, Аннотация *1007* PEP-557 упоминает общее удобство использования известных функций класса Python:

Поскольку классы данных используют обычный синтаксис определения класса, вы свободны использовать наследование, метаклассы, строки документации, определяемые пользователем методы, фабрики классов и другие возможности класса Python.

...