Могу ли я реализовать атрибуты экземпляра вызова метода класса?Python

Программы на Python
Anonymous
Могу ли я реализовать атрибуты экземпляра вызова метода класса?

Сообщение Anonymous »

Мне нужна функция класса, которая создает новый экземпляр из существующих атрибутов экземпляра.
Мне кажется, что это фабричная функция (отсюда и мысль, что это может быть метод класса), но для этого необходимо создать экземпляр класса.
Следует/можно ли использовать декоратор @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

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