Класс Python по умолчанию использует одну функцию - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь создать класс Python (назовите его CLASS), в котором есть основная функция (назовите ее FUNC), которую большинство пользователей захотят использовать.

В этом случае я бы хотел, чтобы пользователь мог вызывать имя класса без необходимости использовать скобки перед избранной функцией, например ::

CLASS(B, C) вместо CLASS().FUNC(B, C)

Это чисто эстетично, но это означает, что пользователям, которые будут использовать FUNC и не заботиться о других функциях, которые они могут явно вызывать, им не нужно писать раздражающие фигурные скобки.

Вот простой пример кода типа класса, который я бы создал, где основная функция (которую я назвал FUNC для непрерывности) использует другие функции в классе:

class Example:

    def dummy_operation(self,A):
        return A*2.

    def FUNC(self,B,C):
        A = self.dummy_operation(B)
        result = A + C
        return result

Так вот, Example заменяет CLASS на удобочитаемость.

Один из способов сделать это выглядит как использование оператора if '__main__' (см. - Основной вызов Python в классе ).

Однако, поскольку FUNC принимает аргументы B и C, это вернет ошибку:

if __name__ == '__main__':
    Example().target_function()

Out:

TypeError: target_function() missing 2 required positional arguments: 'B' and 'C'

Есть ли способ передать Example(B,C), где на самом деле он вызывает Example().FUNC(B,C) но можно все же позвонить Example().dummy_operation(A), если потребуется?

Заранее большое спасибо!

1 Ответ

0 голосов
/ 15 октября 2019

Эта проблема была решена @snakecharmerb в комментариях.

class Example:

    def dummy_operation(self,A):
        return A*2.

    def __call__(self,B,C):
        A = self.dummy_operation(B)
        result = A + C
        return result

Example = Example()
print(Example(1,1))
print(Example.dummy_operation(1))

Out:

3.0
2.0
...