Безопасно ли использовать классы данных со скрытыми/не унаследованными свойствами?Python

Программы на Python
Ответить
Anonymous
 Безопасно ли использовать классы данных со скрытыми/не унаследованными свойствами?

Сообщение Anonymous »

У меня есть довольно гибкая стратегия использования класса данных, но я не уверен, полагается ли она на функции, которые не являются частью контракта типа. Я часто советую людям не полагаться на то, что порядок вставки является повторяемым порядком dict в Python, потому что только OrderedDict имеет это свойство в качестве контракта, а другая версия Python может вести себя по-другому.< /p>
Есть ли какие-либо опасения по поводу такого паттерна? Это дает мне большую гибкость в использовании возможностей класса данных, который имеет такое разделение свойств.
from abc import ABC
from dataclasses import dataclass, fields

class BQTransformer(ABC):
_project: str = 'default-project-name'
_dataset_wo_version: str
_dataset_version: str
_default_table: str

@classmethod
def get_dataset(cls):
return f'{cls._dataset_wo_version}_v{cls._dataset_version}'

@classmethod
def table(cls, table_name=None) -> str:
if table_name is None:
table_name = cls._default_table
return f'{cls._project}.{cls.get_dataset()}.{table_name}'

@dataclass(frozen=True, eq=True)
class BilliardsUser(BQTransformer):
_dataset_wo_version = 'billiards_info'
_dataset_version = '20240830'
_default_table = 'users'
username: str
id: int

A = BilliardsUser(username='Philip', id=3)
B = BilliardsUser(username='James', id=7)

>>> [f.name for f in fields(A)]
['username', 'id']
>>> A.table()
'default-project-name.billiards_info_v20240830.users'


Подробнее здесь: https://stackoverflow.com/questions/791 ... properties
Ответить

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

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

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

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

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