20251003
This commit is contained in:
17
.run/Тест BoolExtension.run.xml
Normal file
17
.run/Тест BoolExtension.run.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Тест BoolExtension" type="tests" factoryName="Autodetect">
|
||||
<module name="anb_python_components" />
|
||||
<option name="ENV_FILES" value="" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/tests/extensions" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<option name="_new_additionalArguments" value="""" />
|
||||
<option name="_new_target" value=""$PROJECT_DIR$/tests/extensions/bool_extension_test.py"" />
|
||||
<option name="_new_targetType" value=""PATH"" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
@@ -9,6 +9,9 @@ class BoolExtension:
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
Инициализация расширения.
|
||||
"""
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
@@ -37,30 +40,30 @@ class BoolExtension:
|
||||
for expression in expressions:
|
||||
# - если аргумент не является типом правда/ложь
|
||||
if not isinstance(expression, bool):
|
||||
# -- если указано действие при не булевом значении - игнорирование
|
||||
if if_not_bool == NotBoolAction.IGNORE:
|
||||
# - игнорируем аргумент и продолжаем цикл
|
||||
continue
|
||||
match if_not_bool:
|
||||
# -- если указано действие при не булевом значении - игнорирование
|
||||
case NotBoolAction.IGNORE:
|
||||
# - игнорируем аргумент и продолжаем цикл
|
||||
continue
|
||||
|
||||
# -- если указано действие при не булевом значении - считать как истинное значение
|
||||
if if_not_bool == NotBoolAction.IT_TRUE:
|
||||
# --- добавляем True в массив проверяемых аргументов
|
||||
check_array.append(True)
|
||||
# --- и продолжаем цикл
|
||||
continue
|
||||
# -- если указано действие при не булевом значении - считать как истинное значение
|
||||
case NotBoolAction.IT_TRUE:
|
||||
# --- добавляем True в массив проверяемых аргументов
|
||||
check_array.append(True)
|
||||
# --- и продолжаем цикл
|
||||
continue
|
||||
|
||||
# -- если указано действие при не булевом значении - считать как ложное значение
|
||||
if if_not_bool == NotBoolAction.IT_TRUE:
|
||||
# --- добавляем False в массив проверяемых аргументов
|
||||
check_array.append(False)
|
||||
# --- и продолжаем цикл
|
||||
continue
|
||||
|
||||
# -- если указано действие при не булевом значении - выбросить исключение
|
||||
if if_not_bool == NotBoolAction.RAISE:
|
||||
# --- то вызываем исключение
|
||||
raise ValueError(f"{expression} не является булевым значением")
|
||||
# -- если указано действие при не булевом значении - считать как ложное значение
|
||||
case NotBoolAction.IT_FALSE:
|
||||
# --- добавляем False в массив проверяемых аргументов
|
||||
check_array.append(False)
|
||||
# --- и продолжаем цикл
|
||||
continue
|
||||
|
||||
# -- если указано действие при не булевом значении - выбросить исключение
|
||||
case NotBoolAction.RAISE:
|
||||
# --- то вызываем исключение
|
||||
raise ValueError(f"{expression} не является булевым значением")
|
||||
else:
|
||||
# - иначе добавляем аргумент в массив проверяемых аргументов
|
||||
check_array.append(expression)
|
||||
@@ -72,10 +75,14 @@ class BoolExtension:
|
||||
return len(filtered)
|
||||
|
||||
@staticmethod
|
||||
def any_true(expressions: list[bool]) -> int:
|
||||
def any_true(expressions: list[bool]) -> bool:
|
||||
"""
|
||||
Возвращает количество истинных значений в списке аргументов.
|
||||
:param expressions: Список аргументов.
|
||||
:return: Количество истинных значений в списке аргументов.
|
||||
Проверяет, есть ли хотя бы один истинный аргумент.
|
||||
:param expressions: Выражения.
|
||||
:return: Есть ли хотя бы один истинный аргумент, то вернется True, иначе False.
|
||||
"""
|
||||
return 0 if len(expressions) == 0 else BoolExtension.true_count(expressions, NotBoolAction.IGNORE)
|
||||
# Получаем количество истинных значений
|
||||
true_count = BoolExtension.true_count(expressions, NotBoolAction.IGNORE)
|
||||
|
||||
# Если количество истинных значений больше нуля, возвращаем True, иначе False
|
||||
return True if true_count > 0 else False
|
||||
|
20
help/class_desc/enums/not_bool_action.md
Normal file
20
help/class_desc/enums/not_bool_action.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Перечисление `NotBoolAction`
|
||||
|
||||
Перечисление `NotBoolAction` предназначено для управления поведением программы в ситуациях, когда ожидается получение
|
||||
булевого значения, однако получено другое. Оно описывает возможные стратегии реакции на такую ситуацию, что даёт
|
||||
разработчику большую свободу выбора поведения системы.
|
||||
|
||||
## Возможные варианты реакций:
|
||||
- **IGNORE**: Игнорировать ситуацию и продолжить выполнение программы.
|
||||
- **IT_TRUE**: Рассматривать любое небулевое значение как истину (True).
|
||||
- **IT_FALSE**: Рассматривать любое небулевое значение как ложь (False).
|
||||
- **RAISE**: Генерировать исключение, сигнализируя о критической ошибке.
|
||||
|
||||
## Основная информация
|
||||
|
||||
- **Имя файла**: anb_python_components\enums\not_bool_action.py
|
||||
- **Автор**: Александр Бабаев
|
||||
- **Версия**: 1.0.0
|
||||
- **Дата начала поддержки**: с версии 1.0
|
||||
|
||||
[На главную](../../index.md)
|
79
help/class_desc/extensions/bool_extension.md
Normal file
79
help/class_desc/extensions/bool_extension.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Класс `BoolExtension`
|
||||
|
||||
Этот класс предназначен для предоставления расширенных возможностей работы с булевыми значениями в Python. Класс
|
||||
обеспечивает удобные способы конвертации булевых значений в строки, подсчета количества истинных элементов в списках и
|
||||
обнаружения наличия хотя бы одного истинного элемента среди списка выражений.
|
||||
|
||||
## Основная информация
|
||||
|
||||
- **Имя файла**: anb_python_components/extensions/bool_extension.py
|
||||
- **Автор**: Александр Бабаев
|
||||
- **Версия**: 1.0.0
|
||||
- **Дата начала поддержки**: с версии 1.0
|
||||
|
||||
## Атрибуты и методы класса
|
||||
|
||||
### Метод `to_str`
|
||||
|
||||
Конвертирует булево значение в строку, используя кастомизированные обозначения для значений `True` и `False`.
|
||||
|
||||
**Параметры**:
|
||||
|
||||
- `b`: Булево значение, которое необходимо преобразовать.
|
||||
- `if_true`: Значение, которое возвращается, если булево значение равно `True` (по умолчанию "True").
|
||||
- `if_false`: Значение, которое возвращается, если булево значение равно `False` (по умолчанию "False").
|
||||
|
||||
`Пример использования`:
|
||||
|
||||
```python
|
||||
from anb_python_components.extensions.bool_extension import BoolExtension
|
||||
|
||||
print(BoolExtension.to_str(True)) # True
|
||||
print(BoolExtension.to_str(False, if_false="Нет")) # Нет
|
||||
```
|
||||
|
||||
### Метод `true_count`
|
||||
|
||||
Подсчитывает количество истинных значений в списке выражений, предлагая разные подходы к обработке не-булевых значений.
|
||||
|
||||
**Параметры**:
|
||||
|
||||
- `expressions`: Список булевых выражений.
|
||||
- `if_not_bool`: Параметр, определяющий стратегию обработки небулевых значений. По умолчанию игнорируются.
|
||||
Стратегии обработки небулевых значений определяются перечислением [`NotBoolAction`](../enums/not_bool_action.md).
|
||||
|
||||
**Пример использования**:
|
||||
|
||||
```python
|
||||
from anb_python_components.enums.not_bool_action import NotBoolAction
|
||||
from anb_python_components.extensions.bool_extension import BoolExtension
|
||||
|
||||
expressions = [True, False, "Некорректное значение"]
|
||||
count = BoolExtension.true_count(expressions, NotBoolAction.IT_TRUE)
|
||||
print(count) # 2
|
||||
```
|
||||
|
||||
### Метод `any_true`
|
||||
|
||||
Проверяет, присутствует ли хотя бы одно истинное выражение в списке.
|
||||
|
||||
**Параметры**:
|
||||
|
||||
- `expressions`: Список булевых выражений.
|
||||
|
||||
**Пример использования**:
|
||||
|
||||
```python
|
||||
from anb_python_components.extensions.bool_extension import BoolExtension
|
||||
|
||||
expressions = [False, False, True]
|
||||
result = BoolExtension.any_true(expressions)
|
||||
print(result) # True
|
||||
```
|
||||
|
||||
## Заключение
|
||||
|
||||
Класс `BoolExtension` существенно облегчает работу с булевыми значениями, предоставляя удобную обработку нестандартных
|
||||
ситуаций и простое управление потоком логики в приложении.
|
||||
|
||||
[На главную](../../index.md)
|
@@ -8,9 +8,16 @@
|
||||
|
||||
## Описание интерфейсов, классов и перечислений:
|
||||
|
||||
### Перечисления
|
||||
|
||||
**Расположение модулей**: anb_python_components\enums\*
|
||||
|
||||
- [перечисление `NotBoolAction`](class_desc/enums/not_bool_action.md)
|
||||
|
||||
### Расширения стандартных типов
|
||||
|
||||
**Расположение модулей**: anb_python_components\extensions\*
|
||||
|
||||
- [класс `StringExtensionConstants`](class_desc/extensions/string_extension_constant.md)
|
||||
- [класс `StringExtension`](class_desc/extensions/string_extension.md)
|
||||
- [класс `StringExtension`](class_desc/extensions/string_extension.md)
|
||||
- [класс `BoolExtension`](class_desc/extensions/bool_extension.md)
|
21
tests/extensions/bool_extension_test.py
Normal file
21
tests/extensions/bool_extension_test.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# string_extension_test.py
|
||||
|
||||
import unittest
|
||||
|
||||
from anb_python_components.extensions.bool_extension import *
|
||||
|
||||
|
||||
class BoolExtensionTest(unittest.TestCase):
|
||||
def test_to_str(self):
|
||||
self.assertEqual(BoolExtension.to_str(True, "да", "нет"), "да")
|
||||
self.assertEqual(BoolExtension.to_str(False, "да", "нет"), "нет")
|
||||
|
||||
def test_true_count(self):
|
||||
self.assertEqual(BoolExtension.true_count([False, True, False, True, True, False, False]), 3)
|
||||
|
||||
def test_any_true(self):
|
||||
self.assertTrue(BoolExtension.any_true([False, True, False, True, True, False, False]))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
Reference in New Issue
Block a user