принять неоцененное логическое выражение в качестве аргумента, отложить выполнение - PullRequest
0 голосов
/ 30 мая 2020

целевой код:

    test_box = TestBox(Checkers.begin_with("op") and Checkers.end_with("or"))
    test_box.run("operator")  # True
    test_box.run("option")  # False

То, что я думаю (может быть неправильным): TestBox может быть классом или методом, а begin_with и end_with являются classmethod класса Checkers, но как сделать так, чтобы Checkers.begin_with("op") and Checkers.end_with("or") оценивался до вызова test_box.run()?

1 Ответ

0 голосов
/ 02 июня 2020

Я нашел решение, использующее лямбда, разместите здесь:

class TestBox:
    def __init__(self, func):
        self._func = func

    def run(self, string):
        Checkers.string = string
        return self._func()


class Checkers:
    string = None

    @classmethod
    def begin_with(cls, val):
        return cls.string.startswith(val)

    @classmethod
    def end_with(cls, val):
        return cls.string.endswith(val)

if __name__ == '__main__':
    test_box = TestBox(lambda: Checkers.begin_with("op") or Checkers.end_with("or"))
    print(test_box.run("operator"))  # True
    print(test_box.run("xxtion"))  # False
    print(test_box.run("xxtionor"))  # True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...