instance = экземпляр класса с которого происходит обращение к свойству
owner_class = класс собственник
from time import timeclassEpoch:# intance - экземпляр класса с которого происходит обращение к свойству# owner_class - класс собственникdef__get__(self,instance,owner_class):returnint(time())classMyTime: epoch =Epoch()m =MyTime()print(m.epoch)# 15984124424 - время в секундах123456789101112131415
Можно использовать и обычный геттер на @property но в таком случае, будет возникать много повторяемого кода...
from random import choiceclassGame:@propertydefrock_paper_scissors(self):returnchoice(["Rock", "Paper", "Scissors"])@propertydefdice(self):returnchoice(range(1, 7))@propertydefflip(self):returnchoice(["Head", "Tails"])g =Game()print(g.flip)# Tails...123456789101112131415161718192021
В этом случае поможет определение отдельного класса (No Data Descriptor) на основе дандер метода __get__ ()
from random import choiceclassChoise:# * - принимает любые аргументы и упаковывает их в списокdef__init__(self,*choice): self._choice = choicedef__get__(self,instance,owner_class):returnchoice(self._choice)classGame: dice =ChoiceGame(1, 2, 3, 4, 5, 6) flip =ChoiceGame("Head", "Tails") rock_paper_scissors =ChoiceGame("Rock", "Paper", "Scissors")g =Game()print(g.flip)# Tails...