Мне кажется, что это фабричная функция (отсюда и мысль, что это может быть метод класса), но для этого необходимо создать экземпляр класса.
Следует/можно ли использовать декоратор @classmethod?
Код: Выделить всё
from dataclasses import dataclass
@dataclass
class Coin:
obverse: str
reverse: str
def flip(self):
return Coin(self.reverse, self.obverse)
cent = Coin('cent_ob', 'cent_rev')
flipped_cent = cent.flip()
cent
Out[20]: Coin(obverse='cent_ob', reverse='cent_rev')
flipped_cent
Out[21]: Coin(obverse='cent_rev', reverse='cent_ob')
Но если я использую декоратор @classmethod, он больше не работает.
Код: Выделить всё
from dataclasses import dataclass
@dataclass
class Coin:
obverse: str
reverse: str
@classmethod
def flip(cls, self):
return cls(self.reverse, self.obverse)
cent = Coin('cent_ob', 'cent_rev')
flipped_cent = cent.flip()
TypeError: Coin.flip() missing 1 required positional argument: 'self'
Есть ли другой декоратор, более подходящий для этого случая?
Я считаю, что мой Основная цель состоит в том, чтобы иметь декоратор, явно указывающий «эй, у вас здесь есть фабричная функция».
Спасибо за вашу помощь!
Подробнее здесь: https://stackoverflow.com/questions/784 ... attributes