Protocol Transaction¶
Transaction est un Protocol Python — pas une classe à hériter.
N'importe quel objet exposant les bons attributs est accepté (duck typing).
Attributs requis¶
| Attribut | Type | Obligatoire |
|---|---|---|
id |
str |
✅ |
amount |
float |
✅ |
currency |
str |
✅ |
user_email |
str |
✅ |
description |
str | None |
❌ |
user_name |
str | None |
❌ |
user_phone |
str | None |
❌ |
Exemples de types compatibles¶
# Aucun héritage nécessaire — les attributs suffisent
class Transaction(Base):
__tablename__ = "transactions"
id = Column(String, primary_key=True)
amount = Column(Float)
currency = Column(String, default="XOF")
user_email = Column(String)
description = Column(String, nullable=True)
user_name = Column(String, nullable=True)
user_phone = Column(String, nullable=True)
Vérification à l'exécution¶
from paygate_africa.base import Transaction
obj = OrderTransaction(id="X", amount=100, currency="XOF", user_email="a@b.com")
print(isinstance(obj, Transaction)) # True
@runtime_checkable
Le Protocol est décoré @runtime_checkable, ce qui autorise isinstance().
Cela ne vérifie que la présence des attributs, pas leurs types.