Pysertive : напоритивный дизайн Python по контракту (DBC) Toolkit
Pysertive - это библиотека Python, которая предоставляет декораторы для реализации принципов проектирования по контракту (DBC). Он упрощает принудительное соблюдение предварительных условий, почтовых кондиционирования и инвариантов в вашем коде. Pysertive стремится стать мощным инструментом для обеспечения поведения и ограничений кода, содействия безопасной, обслуживаемой и надежной разработке программного обеспечения в Python.
То, что Pysertive делает хорошо:
Pysertive разработан с учетом простоты и гибкости, что позволяет вам легко интегрировать строгие контрактные проверки в ваш код Python, который помогает в отладке и поддержании сложных систем.
Чтобы установить Pysertive, просто используйте PIP:
pip install pysertiveВот как быстро начать с Pysertive:
from pysertive import pre_condition , post_condition , invariant
@ pre_condition ( lambda x : x > 0 , exception_type = ValueError , message = "Input must be positive" )
def sqrt ( x ):
return x ** 0.5
@ post_condition ( lambda result : result != None , exception_type = AssertionError , message = "Result cannot be None" )
def fetch_data ():
return { "data" : "Here is your data" }
@ invariant ( lambda self : self . balance >= 0 , exception_type = RuntimeError , message = "Insufficient funds" )
class BankAccount :
def __init__ ( self , balance ):
self . balance = balance
def deposit ( self , amount ):
self . balance += amount
def withdraw ( self , amount ):
self . balance -= amount # No need to manually check for negative balance Убедитесь, что входные данные для ваших функций действительны:
@ pre_condition ( lambda age : age >= 18 , exception_type = ValueError , message = "Must be 18 or older" )
def sign_contract ( age ):
print ( f"Contract signed by individual aged { age } " )Проверить выходы после выполнения ваших функций:
@ post_condition ( lambda result : result > 0 , exception_type = AssertionError , message = "Profit must be positive" )
def calculate_profit ( revenue , costs ):
return revenue - costsГосударства класса принудительно остаются последовательными:
@ invariant ( lambda self : self . inventory_count >= 0 , exception_type = RuntimeError , message = "Inventory count cannot be negative" )
class Warehouse :
def __init__ ( self , inventory_count ):
self . inventory_count = inventory_count
def add_stock ( self , number ):
self . inventory_count += number
def remove_stock ( self , number ):
self . inventory_count -= number Для более подробных примеров того, как использовать Pysertive, ознакомьтесь с файлом examples.py в репозитории. Этот файл содержит примеры того, как использовать предварительные условия, почтовые кондиционирования и инварианты в вашем коде Python.
Взносы приветствуются! Если вы хотите внести свой вклад, пожалуйста, ознакомьтесь с руководством по применению и не стесняйтесь открыть проблему или запрос на тягу.
Pysertive выпускается по лицензии MIT. Смотрите файл лицензии для получения более подробной информации.
Перейти на вершину