Skip to content
Advertisement

asdict() inside .format() in a Python class

How can I use asdict() method inside .format() in oder to unpack the class attributes. So that instead of this:

from dataclasses import dataclass, asdict

@dataclass
class InfoMessage():
    training_type: str
    duration: float
    distance: float
    message = 'Training type: {}; Duration: {:.3f} ч.; Distance: {:.3f}'

    def get_message(self) -> str:
        return self.message.format(self.training_type, self.duration, self.distance)

I could write something like this:

@dataclass
class InfoMessage():
    training_type: str
    duration: float
    distance: float
    message = 'Training type: {}; Duration: {:.3f} ч.; Distance: {:.3f}'

    def get_message(self) -> str:
        return self.message.format(asdict().keys())

Advertisement

Answer

asdict should be called on an instance of a class – self, in this case. Additionally, you don’t need the dict’s keys, you need its values, which you can spread using the * operator:

def get_message(self) -> str:
    return self.message.format(*asdict(self).values())
    # Here --------------------^
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement