instance = экземпляр класса с которого происходит обращение к свойству
owner_class = класс собственник
from time import time
class Epoch:
# intance - экземпляр класса с которого происходит обращение к свойству
# owner_class - класс собственник
def __get__(self, instance, owner_class):
return int(time())
class MyTime:
epoch = Epoch()
m = MyTime()
print(m.epoch)
# 15984124424 - время в секундах
123456789101112131415
Можно использовать и обычный геттер на @property но в таком случае, будет возникать много повторяемого кода...
from random import choice
class Game:
@property
def rock_paper_scissors(self):
return choice(["Rock", "Paper", "Scissors"])
@property
def dice(self):
return choice(range(1, 7))
@property
def flip(self):
return choice(["Head", "Tails"])
g = Game()
print(g.flip)
# Tails
...
123456789101112131415161718192021
В этом случае поможет определение отдельного класса (No Data Descriptor) на основе дандер метода __get__ ()
from random import choice
class Choise:
# * - принимает любые аргументы и упаковывает их в список
def __init__(self, *choice):
self._choice = choice
def __get__(self, instance, owner_class):
return choice(self._choice)
class Game:
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
...