Предизвикателства > Безгрешен блок > Решения > Решението на Марина Господинова

Резултати
1 точки от тестове
0 точки от учител

1 точки общо

2 успешни теста
0 неуспешни теста
Код

 1class ProtectedSection:
 2    """Еxecute a (relatively) error-free block of code."""
 3
 4    def __init__(self, log=(), suppress=()):
 5        self.log = log
 6        self.suppress = suppress
 7        self.exception = None
 8
 9    def __enter__(self):
10        self.exception = None
11        return self
12
13    def __exit__(self, exc_type, exc_val, exc_tb):
14        if exc_type:
15            if exc_type in self.log:
16                self.exception = exc_val
17                return True
18            elif exc_type in self.suppress:
19                return True
20        return False

..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Дискусия
Виктор Бечев
09.11.2024 14:36

`camelCase` _(в PEP8 го наричат `mixedCase`)_ не искаме да използваме никъде... Въпреки, че го има тук-таме в стандартната библиотека - `unittest.TestCase.assertEqual`, някъде в xml библиотеката и прочие. Това са legacy неща, така че въпреки, че противоречат на конвенцията - не са аргумент за това да пишем напук на PEP8. `snake_case` са имената на променливите, атрибутите, функциите, методите. Почти всичко, с други думи. `SCREAMING_SNAKE_CASE` ползваме за имена на константи както глобални, така и в контекста на класови атрибути. И финално - `CamelCase`, но от хубавия, използваме само за класове. В случая е окей, а ако искахме контекстният ни мениджър да е в `snake_case`, както например `with open(file):`, тогава би следвало да направим следното: ``` class _ProtectedSection: ... protected_section = _ProtectedSection ``` Може да изглежда дребнаво, но всъщност в контекста на голям проект, чиито код се чете и пише от множество хора - доста важно. [PEP8 reference](https://peps.python.org/pep-0008/#class-names). [Something even better](https://www.youtube.com/watch?v=hgI0p1zf31k&ab_channel=PythonDiscord).
Марина Господинова
09.11.2024 14:05

Не знам дали мястото да попитам е тук, но понеже името на контекстния мениджър е ProtectedSection, при имената на кои видове обекти е позволено използването на camelCase/PascalCase (освен класовете) и къде да се придържаме към snake_case?
История

f1class ProtectedSection:f1class ProtectedSection:
2    """Еxecute a (relatively) error-free block of code."""2    """Еxecute a (relatively) error-free block of code."""
33
4    def __init__(self, log=(), suppress=()):4    def __init__(self, log=(), suppress=()):
5        self.log = log5        self.log = log
6        self.suppress = suppress6        self.suppress = suppress
7        self.exception = None7        self.exception = None
88
9    def __enter__(self):9    def __enter__(self):
tt10        self.exception = None
10        return self11        return self
1112
12    def __exit__(self, exc_type, exc_val, exc_tb):13    def __exit__(self, exc_type, exc_val, exc_tb):
13        if exc_type:14        if exc_type:
14            if exc_type in self.log:15            if exc_type in self.log:
15                self.exception = exc_val16                self.exception = exc_val
16                return True17                return True
17            elif exc_type in self.suppress:18            elif exc_type in self.suppress:
18                return True19                return True
19        return False20        return False
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op